如果我在浏览器控制台中执行以下行
!![] //--- returns true
!!0 //--- returns false
Run Code Online (Sandbox Code Playgroud)
我明白了,[]并且0有不同的布尔值.
我不明白为什么
[] == 0 //--- returns true
Run Code Online (Sandbox Code Playgroud)
回报true.
我错过了什么?
请记住,数组是对象,0是数字.
而正如"user2864740"告诉..
1)当你做的时候
!![] //--- returns true
!!0 //--- returns false
Run Code Online (Sandbox Code Playgroud)
您正在执行所谓的"ToBoolean"转换
数
如果参数为+ 0,-0或NaN,则结果为false; 否则结果是真的.
对象(我们的[])
总是如此
2)但是当你使用==你执行所谓的"平等比较"时
https://es5.github.io/#x11.9.3
这里有点复杂,但要了解发生了什么,你必须记住==做一个类型强制(所以你可以比较橙子和苹果:))
首先,编译器将[]转换为某种原始类型.
如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y).
To ToPrimitive的工作原理是文章:),但很容易记住,closet基本类型到数组是字符串.数组将转换为空字符串.
[] .toString()===""
所以现在我们需要比较空字符串和数字0
"" == 0 // true
Run Code Online (Sandbox Code Playgroud)
嗯.这是真的.但那是为什么呢?请记住,当您与"Equality Comparison"数字和字符串进行比较时
- 如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).
所以让我们尝试将空字符串转换为数字
Number("") === 0
Run Code Online (Sandbox Code Playgroud)
最后
0 === 0
Run Code Online (Sandbox Code Playgroud)
我希望这能解释一下:)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |