⚠️⚠️⚠️注意
在实际编程中使用『!==』与『===』,而不要使用『==』 或是 『!=』
if() 表达式
对于括号里的表达式,会被强制转换为布尔类型 ToBoolean
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
==
只需要记住 『undefined == null』,undefined和null与其他类型比较时,结果为false。其他类型的值,一般是是通过强制转化成数字,然后再进行比较,
x | y | 结果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
toNumber
类型 | 结果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
Object | 1. Let primValue be ToPrimitive(input argument, hint Number) 2. Return ToNumber(primValue). |
Object 先调用
valueOf
得到 原始类型的值 转化为 number 再比较。如果valueOf
得到的不是原始值,则调用toString
。否则报错
实例剖析
?[0] == true //false
[0] == true; // 工作流程// toNumber转化布尔值为 数字[0] == 1;// toPrimitive 把『object』转化为『原始类型的值』//[0].valueOf() 转化仍然为诶『object』,再调用toString()//[0].toString() -> "0""0" == 1; //toNumber转化 string '1' 为数字0 == 1; //false!
?[] == true //false
[] == true; // 工作流程// toNumber转化布尔值为 数字 Number(true)[] == 1;// toPrimitive 把『object』转化为『原始类型的值』//[].valueOf() 转化仍然为诶『object』,再调用toString()//[].toString() -> """0" == 1; //toNumber转化 string '' 为数字 Number('')0 == 1; //false!
?{} == true //false
{} == true; // 工作流程// toNumber转化布尔值为 数字{} == 1;// toPrimitive 把『object』转化为『原始类型的值』//{}.valueOf()『报错』,再调用toString()//{}.toString() 『还是报错』{} == 1 // false{} == 0 // false
参考
:
!!!Truth, Equality and JavaScript – JavaScript
== if() ===-JS Comparison Table
版权声明:本文为博主原创文章,未经博主许可不得转载
文章转载于:https://www.jianshu.com/p/3548f781b66a
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~