在数学中,= 被假定为传递关系。传递性的意思正是你所说的:A = B和B = C意味着A = C。但是,据我所知,javascript不尊重这种传递性原则。对于以下所有表达式,输出均为 TRUE[]==0true0==[]true"0" == 0true0 == "0"true但是,这是错误的"0" == []false它背后的原因是什么?编译器如何处理这个表达式?
3 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
右侧值被强制转换为字符串。
console.log("0" == []) // false
console.log([].toString()) // ""
console.log("" == [].toString()) // true
console.log("0" == [0].toString()) // true
console.log([0, 1, 2, 3].toString()) // 0,1,2,3
console.log("0,1,2,3" == [0, 1, 2, 3]) // true
心有法竹
TA贡献1866条经验 获得超5个赞
JavaScript 的激进类型的强制转换会导致奇怪的结果。空数组的字符串等价物是空字符串,因此这就是它的工作原理。同样,将空字符串转换为数字会得到零,因此您也可以将数组转换为数字。字符串“0”等于 0,因为调用 0.toString 给出“0”。但我们之前说过,空数组会变成空字符串,因此我们不能将“0”作为空数组的转换版本。
所有这一切的发生首先是由于“==”,它强制类型。对于“===”,这些等式都不成立。
添加回答
举报
0/150
提交
取消