Ans*_*shu 4 javascript comparison
我遇到了以下情况,无法理解原因,有人可以解释一下吗?
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
Run Code Online (Sandbox Code Playgroud)
第二个比较很容易解释:foo等于它自己.
然而,第一个有点棘手:foo是一个数组,它是一个对象,true在强制转换为布尔值时进行求值.所以!foo是false.但是foo在比较的左侧没有被转换为布尔值.在相等比较期间,两个操作数实际上都转换为数字.这是它评估的方式:
[0] == false
[0] == 0
"0" == 0
0 == 0
true
Run Code Online (Sandbox Code Playgroud)
根据MDN,与等于运算符的比较==:
如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,则操作数将转换为数字(如果可能)
我知道这个解释听起来很肤浅.它实际上要复杂得多,但基本步骤是我上面列出的步骤.您可以在ECMA-262规范中查看详细信息,尤其是第9和11.9节.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |