隐式类型转换的一些总结

布尔比较

最近做项目遇到布尔比较的问题,总是掉坑,来总结一下

来源于司徒正美大大的博客: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 的概念。

原文地址:https://www.cnblogs.com/minb/p/6237728.html