运算符typeof

源码下载

  前面的几节课提到过字符串、数字、数组几种类型数据,本节课就通过使用运算符typeof判断数组元素类型,来处理一个数组的数据。

8        //等待处理的数组数据
9        let arr1 = [
10           "秦",-211,"蒙恬","胡人不敢南下而牧马","汉","霍去病",
11           "犯强汉者虽远必诛",-202, "隋",581,"唐",618,"宋",960,
12           "明",1368,"共和国",1949,"彭德怀","勿谓言之不预也"
13       ];
14       //创建一个数组,用来容纳arr1数组中数字类型的元素
15       let arr2 = [];
16       //循环遍历数组arr1所有元素
17       for(let i = 0;i<arr1.length;i++){
18           //判断元素arr1[i]是否属于数字number类型数据
19           if(typeof arr1[i] == "number"){
20               //使用数组对象的方法push把元素arr1[i]写入数组arr2
21               arr2.push(arr1[i]);
22           }
23       }
24       //循环遍历数组arr2所有元素
25       for(let i = 0;i<arr2.length;i++){
26           //在网页上显示元素arr2[i]
27           document.write(arr2[i]);
28           //执行换行操作,保证所有数组的元素不堆在一起
29           document.write("<br>");
30       }  

体验测试

  在arr1数组中随意输入一个数,刷新浏览器,查看网页显示结果是否更新。

代码解析

  上面代码的整体功能就是把数组arr1中数字类型的元素提取出来,全部写入数组arr2中。实际工程中经常会处理大量的数据,上面的arr1数组只是一个例子,数据比较少。从数组中提取数据,少先要做的 就是查看该数组的存储数据的特点,或者说数据结构。比如arr1数组的所有元素从数据类型上看就是数字number类型和字符串string类型,因为数据多,不可能使用方括号的形式访问提取,所有可以采用for循环结构程序 遍历所有的arr1所有元素,那么在现有一个问题,Javascript解释器怎么知道一个数组元素的数据类型,不同的数据类型的数据在内存中的存储结构是不一样的,ECMAScript提供一个关键字typeof用来判断数据的类型。查看 第19行代码typeof arr1[i]的意思就是,判断元素arr1[i]的类型。==是一个比较运算符,判断等号两边是否相等,与>、< 一样都属于比较运算符。typeof arr1[i] == "number"表达的意思就是rr1[i]元素的数据类型是否是数字number 类型。

  前面讲过自增运算符++,比如i++表示i增加1,相当于i加1把结果再赋值给i,也可以说内存上存储的变量i增加1,typeof和++、= 一样属于运算符,只是类别不同,=、+=、*=属于赋值运算符,++、+、*属于算术运算符, 运算符的特点是变量执行之后,会返回结果。i++返回结果自身加一,i在内存上的存储位置不变,s+=5返回结果s增加5,s在内存上的存储位置不变,typeof arr1[0]返回的结果是一个一个字符串"string", typeof arr1[1]返回的结果是一个一个字符串"number",arr1[1]执行typeof运算符没有赋值过程,会返回一个结果字符串结果,但是本身不会发生变化。比较运算符返回的结果是布尔类型数据,数字类型的数据有无数个,整数小数都是数字类型数据, 而布尔类型的数据只有true和false两个,true表示是,false表示否,例如if(true){...}会执行{...}里面的语句,if(false){...}不会会执行{...}里面的语句。

关键字

语法