- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果我在浏览器控制台中执行以下行
!![] //--- returns true
!!0 //--- returns false
我知道 []
和 0
有不同的 bool 值。
我不明白为什么
[] == 0 //--- returns true
返回 true
。
我错过了什么?
最佳答案
记住数组是对象,0 是数字。
正如“user2864740”所说的......
1) 当你做的时候
!![] //--- returns true
!!0 //--- returns false
您正在执行所谓的"ToBoolean" 转换
数量
The result is false if the argument is +0, −0, or NaN; otherwise the result is true.
对象(我们的[])
always true
2) 但是,当您使用 == 时,您执行的是所谓的“相等比较”
https://es5.github.io/#x11.9.3
这里有点复杂,但要了解发生了什么,您必须记住 == 进行类型强制转换(这样您就可以将橙子与苹果进行比较 :))
首先,编译器将 [] 转换为一些原始类型。
If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).
ToPrimitive 的工作原理是一篇文章的问题:),但是很容易记住数组的基本类型是字符串。数组将被转换为空字符串。
[].toString() === ""
所以现在我们需要比较空字符串和数字 0
"" == 0 // true
嗯。所以这是真的。但这是为什么呢?请记住,当您比较“平等比较”数字和字符串
- If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).
所以让我们尝试将空字符串转换为数字
Number("") === 0
最后
0 === 0
我希望这能解释一些事情 :)
关于javascript - 为什么 "[] == 0"返回真而 "[]"为真而 "0"为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854092/
我是一名优秀的程序员,十分优秀!