详解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。
二、==和===的区别
==会把比较的二者进行类型转换,===是不会把比较的二者进行类型转换的。
综合案例:
三、深入分析==比较时的情况
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。
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。
相关文章推荐
- JavaScript中的条件判断语句使用详解
- javascript if条件判断详解
- JavaScript中的条件判断语句使用详解
- 05-javascript 条件判断
- javascript:多重条件判断
- 从零开始学_JavaScript_系列(二)——弹框及读取、条件判断、事件处理、注释、图片、超链和div
- Javascript中判断一个值是否为undefined的方法详解
- Nginx中if语句的判断条件与多条件判断详解
- JavaScript 函数调用规则和if条件判断
- makefile详解 条件判断 二十
- 分析 JavaScript 中令人困惑的变量赋值
- javascript里的条件判断
- shell条件判断之if实例详解
- [js点滴]JavaScript之设备事件之横竖屏判断详解02
- 100. NSScanner类条件判断利器详解
- JavaScript知识点之如何使用匿名的方法做条件判断
- 关于JavaScript和jQuery的类型判断详解
- javascript里的条件判断
- javascript判断回文数详解及实现代码
- javascript: if语句中的判断条件,什么时候为假?