JavaScript 中的传递性

在数学中,= 被假定为传递关系。传递性的意思正是你所说的:A = B和B = C意味着A = C。但是,据我所知,javascript不尊重这种传递性原则。


对于以下所有表达式,输出均为 TRUE


[]==0

true


0==[]

true


"0" == 0

true


0 == "0"

true

但是,这是错误的


"0" == []

false

它背后的原因是什么?编译器如何处理这个表达式?


莫回无
浏览 118回答 3
3回答

慕姐8265434

查看有关非严格 Javascript 相等运算符的文档。它尝试转换不具有相同类型的对象,虽然它显然支持 [] 和 0,但它没有对“0”和 [] 的强制。我猜测其背后的原因:0 通常用于表示 False 的布尔值。当转换为布尔值时,[] 的值为 False,因此[] == 0用布尔值表示是方便的。"0" == 0然而,出于不同的原因,这是正确的;字符串“0”代表整数0。从逻辑上来说,相等运算符实际上代表了两种不同的关系,因此它们之间不存在传递性。

慕桂英3389331

右侧值被强制转换为字符串。console.log("0" == []) // falseconsole.log([].toString()) // ""console.log("" == [].toString()) // trueconsole.log("0" == [0].toString()) // trueconsole.log([0, 1, 2, 3].toString()) // 0,1,2,3console.log("0,1,2,3" == [0, 1, 2, 3]) // true

心有法竹

JavaScript 的激进类型的强制转换会导致奇怪的结果。空数组的字符串等价物是空字符串,因此这就是它的工作原理。同样,将空字符串转换为数字会得到零,因此您也可以将数组转换为数字。字符串“0”等于 0,因为调用 0.toString 给出“0”。但我们之前说过,空数组会变成空字符串,因此我们不能将“0”作为空数组的转换版本。所有这一切的发生首先是由于“==”,它强制类型。对于“===”,这些等式都不成立。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript