面试题中常见的数据类型陷阱【1】

* 首先明确一下js中常见的false值有:0,+0,-0,false,"",undefined,null,NaN.

我们平时这样说是在强制转换Boolean()或隐式转换情况下,所以正常情况下作比较,情况如下:

1     console.log(NaN==undefined);   //false
2     console.log(NaN==false);      //false
3     console.log(undefined==false);      //false
4     console.log(null==false);     //false

此时不存在隐式转换,所以为false。

但若在数字或字符类型进行比较时,js运行机制会将其隐式转换为Boolean类型:

1  console.log(false=="");   //true
2  console.log(false==0) ; //true

但作为弱类型语言,js有着很多不符合常理的情况,我们称之为怪异行为:


      console.log("0"==false);    //true
console.log(Boolean("0")); //true
1     Boolean([]);      //true
2     console.log([]==false); //true
3     console.log(null==undefined);   //true

最后再说NaN,W3C的API中这样说NaN:

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

可以使用 isNaN() 全局函数来判断一个值是否是 NaN 值。

console.log(typeof NaN);    //number

意思就是NaN就是一个量,他不是数字,但和数字同属于number类型。既然是一个非数字的量,那么它就不能比较:

    console.log(NaN==NaN);  //false
    console.log(NaN===NaN);  //false
    console.log(NaN==false);  //false
    console.log(NaN=="ABC");   //false

 

posted @ 2017-03-11 21:37  TateWang  阅读(220)  评论(0编辑  收藏  举报
Top