面试题中常见的数据类型陷阱【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

 

转载于:https://www.cnblogs.com/pomelott/p/6536279.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值