布尔比较
最近做项目遇到布尔比较的问题,总是掉坑,来总结一下
来源于司徒正美大大的博客:http://www.cnblogs.com/rubylouvre/p/3990290.html
这里先说说“==”引起的隐式类型转换,导致布尔结果的改变。
规则 :
. 如果存在NaN,一律返回false;
. 再看看有木有布尔,有布尔就将布尔转换为数字。
. 接着看有木有字符串:
对方是对象,对象使用toString进行转化;
对方是数字,字符串转数字。
对方是字符串,直接比较,其他返回fasle。
null,undefined不会进行类型转化,但是他们两个相等。
0 == undefined;
//false
1 == true;
//true
2 == {valueOf: function(){return 2}}
//true
8 == undefined
//false
1 == undefined
//false
null == {toString: function(){return 2}};
//false
0 == null;
//false
null == 1;
//false
. 多个小语句组成的大语句布尔表达式
规则:
。 例子语句
0&&0||1 //1
总结:左值 && 右值:
左值为真,执行并返回右值,否则返回左值
左值 || 左值:
左值为真,直接返回左值,否则返回右值。
0 && 0 这是一个语句, ||1 又是一个语句。
是返回了 这外语句的 值,比如 0&&0 返回 0,只代表执行完了这个语句,并且值为0,并不是 return 的概念。