以下比较在javascript中都返回false
:
[]===[]
[]==[]
{}==={}
{}=={}
[0]===[0]
[0]==[0]
但是以下返回 true
:
[0]=='0'
[0]==0
[]==false //(and all other == that were exampled above)
这是什么原因?特别是[0]!=[0]
和[0]==0
fiddle :http://jsfiddle.net/vnBVj/
最佳答案
这是由于困惑的规则,javascript如何进行类型转换。您可以在 §11.9.3 中阅读相关内容符合 EcmaScript 5 规范。
两个对象(数组也是)永远不相等,因此您在第一个 block 中的所有比较都会产生错误(§11.9.3.1.c.vi)
第二 block 比较难:
首先要知道的是,==
使用类型强制来比较操作数。
当比较涉及 bool 值时,首先将其强制转换为数字。
[]==false
[]==0
之后,通过调用 Object.prototype.toString
"" == 0
然后字符串被强制转换为数字(""
变成0
)
0 == 0
屈服于真实。通过应用相同的规则,您可以看到为什么您的其他示例也产生 true。
请注意,===
永远不会导致类型强制转换,而是首先检查正确的类型,如果不相等则返回 false!只有当类型相等时,它才会比较实际值。所以这种比较方式远比==
可靠。
关于javascript - 为什么 [] === [] (和其他人)在 javascript 中返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856597/