您的位置:首页 > Web前端 > JavaScript

详解JavaScript令人困惑不解的条件判断

2015-04-24 13:08 393 查看
一、单条件判断

undefined-----false

null----------false

0-------------false

'0'-----------true

''------------false

-1------------true

NaN------------false

NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。

在单条件判断这种情况下,不为空的字符串、不为0的数字、不为null的对象、不为undefined的对象属性、不为NaN,结果都是为true,反之为false。

二、==和===的区别

==会把比较的二者进行类型转换,===是不会把比较的二者进行类型转换的。

if(1 == '1') { alert('i am xlinsist'); } //结果会弹出i am xlinsist
if(1 === '1') { alert('i am xlinsist'); } //结果不会弹出i am xlinsist


综合案例:

if(0) {
alert('i am xlinsist one'); //0代表false,所以将不会弹出i am xlinsist one
}

if('0') {
alert('i am xlinsist two'); //由于'0'是非空字符串,所以将会弹出i am xlinsist two
}

if('0' == false) {
alert('i am xlinsist three'); //由于==会进行类型转换,所以将会弹出i am xlinsist three
}

if('0' === false) {
alert('i am xlinsist four'); //由于===不会进行类型转换,所以将不会弹出i am xlinsist four
}


三、深入分析==比较时的情况

1、对于相同类型的两个标量的比较,除了NaN比较特殊之外(NaN==NaN返回false),其余正常比较就OK了。

2、对于类型不同的两个标量的比较,总将两边的值转换成数字,再看看转换以后的数字是否相等。

3、将一个简单类型(这里指除undefined与null的值)与一个对象比较时,先调用对象的valueOf()方法,以期待返回一个标量,如果对象的valueOf方法返回的仍然是一个复合对象的话就接着调用对象的toString()方法以期待返回一个标量,如果仍然没有返回标量的话,就判为不相等。

四、总结

1、Number,Boolean,String,Undefined这几种基本类型混合比较时,会将其转换成数字再进行比较。

2、基本类型与复合对象进行比较时,会先将复合对象转换成基本类型(依次调用valueOf()与toString()方法),再进行比较。

3、undefined被当成基本类型,undefined转换成数字是NaN,因此undefined与除null之外的其它类型值进行比较时始终返回false(注意NaN==NaN返回false)。

4、null被当成复合对象,由于null没有valueOf与toString方法,因此和除了undefined之外的其它类型值进行比较时始终返回false。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息