美文网首页
javascript的== 与 ===

javascript的== 与 ===

作者: 进击的前端 | 来源:发表于2017-01-29 16:23 被阅读64次

最近在读《你不知道的Javascript(中卷)》,看到有关于等号的内容,突然想起来以前的面试题中被问到这两个问题的答案,当时答得一塌糊涂,现在准备好好地梳理一下。

书上提醒了我,如果大家说的不太一样的话,那么就去看标准
ecma的标准(这里6.0)中,7.2.12是Abstract Equality Comparison,也就是“==”,这里被称为抽象相等,7.2.13讲Strict Equality Comparison,也就是“===”,严格相等。

对于下面的问题

{}=={} 
{}==={}
[]==[]
[]===[]
NaN == NaN
NaN === NaN

对于数组和对象,都是引用类,那么看引用的是不是同一个对象,如果是的话,为true,否则为false,==和===是一样的标准。NaN什么情况下都与自己不相等。

对于==

如果被比较的一方有数字的话,另外一个是primitive类型的话,那么将另外一个toNumber,转化为数字再进行比较。

这里就涉及到一个布尔值的问题。

"42"==true
"42"==false

如果有一个为布尔值的话,那么先把布尔值转为数字,再进行比较,true为转为1,false转为0。

If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

那么问题就变成了

"42"==1
"42"==0

这个时候,在一方为数字的时候,把另外一方转化为数字,把"42"转为42,显然两个答案都是false。

另外一种是”undefined"和”null"之间,他们可以互通,其他情况都不可以。

最后一种情况是一方是Object,另外一方是Primitive的情况。

[42] == 42

这种情况下,对Object实行toPrimitive,然后再进行比较。

相关文章

网友评论

      本文标题:javascript的== 与 ===

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