typeof判断类型的缺陷

typeof判断类型的缺陷_第1张图片
对象字面量

观察以上结果发现:

  • typeof NaN的结果是number,所以测试一个数字是否等于NaN,但是js提供了isNaN()来判断(isNaN会对判断类型进行类型转换),es6提供了Number.isNaN(), 它比isNaN更可靠,不会进行隐式转换数字;在Number.isNaN不可以用的时候,通过 x !== x更可靠。

判断isNaN主要是来检测变量是否是可运算的。

typeof判断类型的缺陷_第2张图片
isNaN会对传递的类型尝试转换为数字,之后对转换的值和NaN比较
  • typeof []的结果是object,可以通过Array.isArray()来判断,找不支持该方法的情况下,只能使用终极武器
var isArray  = function (x) {
    if (!Array.isArray){
          return Object.prototype.toString().call(x) === '[object Array]';
    }
    return Array.isArray(x);
}
  • ````typeof null的结果是object,可以通过null```
    判断是否是null;
typeof x== 'object' && x == null    //或者toString大法
typeof判断类型的缺陷_第3张图片
使用new关键字声明

将一个函数通过new实例化之后,那么就创建了一个对象

你可能感兴趣的:(typeof判断类型的缺陷)