ric*_*uck 5 javascript comparison casting
以下比较所有falsejavascript 返回:
[]===[]
[]==[]
{}==={}
{}=={}
[0]===[0]
[0]==[0]
Run Code Online (Sandbox Code Playgroud)
但是以下回报true:
[0]=='0'
[0]==0
[]==false //(and all other == that were exampled above)
Run Code Online (Sandbox Code Playgroud)
这是什么原因?尤其之间的差[0]!=[0]和[0]==0
这是由于混乱的规则,javascript如何键入强制.您可以在EcmaScript 5规范的§11.9.3中阅读此内容.
两个对象(也是数组)永远不会相等,因此第一个块中的所有比较都会产生错误(§11.9.3.1.c.vi)
第二块更难:
首先要知道的是,==使用类型强制来比较操作数.
当比较涉及布尔值时,首先将该强制转换为数字.
[]==false
[]==0
Run Code Online (Sandbox Code Playgroud)
之后,通过调用将对象强制转换为原始值 Object.prototype.toString
"" == 0
Run Code Online (Sandbox Code Playgroud)
然后字符串被串联到一个数字(""变成0)
0 == 0
Run Code Online (Sandbox Code Playgroud)
产生真实.通过应用相同的规则,您可以看到为什么您的其他示例也会产生真实.
请注意,===永远不会导致类型强制,但首先检查正确的类型,如果它们不相等则产生错误!仅当类型相等时,才比较实际值.所以这种比较方法远比可靠==.
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |