⚠️⚠️⚠️注意
在实际编程中使用『!==』与『===』,而不要使用『==』 或是 『!=』
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()即是({}).valueOf().toString(),返回的是值 "[object Object]",而"[object Object]"转化为`number`的值是NaN,所以
({}) == 1 // false
({}) == 0 // false
参考
:
!!!Truth, Equality and JavaScript – JavaScript
== if() ===-JS Comparison Table
版权声明:本文为博主原创文章,未经博主许可不得转载
网友评论