JavaScript高级程序设计之typeof踩坑

346 阅读1分钟

结论:

  1. typeof 返回的是字符串
  2. 返回的字符串 都是小写

菜鸡的踩坑之路,话不多说,直接上例子

var nums = [1,1,1,"1","1.5","a"];
var filterResult = nums.filter(function(item,index,array){
  return typeof item != Number;
});
alert(filterResult);  // 1,1,1,"1","1.5","a"
我原以为会返回 "1","1.5","a"来着,结果反手一点返回1,1,1,"1","1.5","a"  淡定

调试

var nums = [1,1,1,"1","1.5","a"];
var filterResult = nums.filter(function(item,index,array){
    console.log((typeof item) + "   " + item + "  " + (typeof item != "number")); // 打印看下结果
   /* 控制台输出结果如下
    number   1  false
    number   1  false
    number   1  false
    number   1  false
    string   1  true
    string   1.5  true
    string   a  true
    */
  return typeof item != Number;
});
alert(filterResult);  // 1,1,1,"1","1.5","a"
懵逼ing  我在哪 没错啊  

分析:
谷歌 typeof item != Number 发现别人 Number带有引号

试试typeof item != "Number"

测试:

var nums = [1,1,1,"1","1.5","a"];
var filterResult = nums.filter(function(item,index,array){
  return typeof item != "Number";
});
alert(filterResult);  // 1,1,1,"1","1.5","a"  懵逼 还是一样

分析: 为什么别人可以 我不行 最后发现 别人是"number"小写的n,我是"Number"大写的n

测试:

var nums = [1,1,1,"1","1.5","a"];
var filterResult = nums.filter(function(item,index,array){
  return typeof item != "number";
});
alert(filterResult);  // "1","1.5","a"  终于对上了