美文网首页
JavaScript之if(xx)和 x==y的判断

JavaScript之if(xx)和 x==y的判断

作者: YYPL | 来源:发表于2020-06-01 23:49 被阅读0次

⚠️⚠️⚠️注意

在实际编程中使用『!==』与『===』,而不要使用『==』 或是 『!=


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


版权声明:本文为博主原创文章,未经博主许可不得转载

相关文章

网友评论

      本文标题:JavaScript之if(xx)和 x==y的判断

      本文链接:https://www.haomeiwen.com/subject/lbtyzhtx.html