运算符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){...}不会会执行{...}里面的语句。
关键字
- typeof:判断变量属于哪种数据类型的运算符
语法
- 运算符格式——空格
大家在阅读一些代码的时候,比较x = 10和typeof arr1[i]你可以看出运算符typeofh和=在使用的时候都会使用空格与变量隔开,以免混淆,程序里面像=、+、、*、>等运算符,不用空格间隔也没问题,主要是这些常见的运算符 不是英文字母,不会与变量名字混在一起,而typeof arr1[i]中的运算符typeof和变量名arr1之间没有空间间隔,会发生混淆。