1 回答
慕田峪7331174
TA贡献1828条经验 获得超13个赞
由我写的这篇文章中: JS中的关系比较与相等比较运算,里面有谈到相等比较运算的规则。
[]==![]
的运算步骤为下:
右值受了逻辑否运算(!)的影响会转为布尔值,跟据ECMAScript标准中的ToBoolean内部运算规定,数组为物件类型,转为
true
,前面因带了逻辑否运算(!)则反转布尔值,变为false
。此运算变为[] == false
。根据标准相等比较演算第(7)规则,
Type(y)是Boolean时,进行x == ToNumber(y)
,右值需经ToNumber内部运算,右值转变为0
数字,此运算变为[] == 0
根据标准相等比较演算第(9)规则(详略),左值此时的数组为对象类型,进行ToPrimitive内部运算,左值得出空字符串
""
,此运算变为"" == 0
根据标准相等比较演算第(5)规则(详略),左值此时的空字串符进行ToNumber内部运算,得出
0
数字。此运算变为0 == 0
因左值与右值此时为同数据类型,进行严格相等比较演算,依4-b规则,左值与右值为同样数字,最后得出
true
结果。
以上,最终结果为true
。
整体运作逻辑就这样,规则里都有排愈前面的愈优先。
注: ToPrimitive的内部运算规则,请参考另一篇我写的文章中有说明: JS的{} + {}与{} + []的结果是什么?
添加回答
举报
0/150
提交
取消