gpt4 book ai didi

javascript - 为什么一个对象大于/小于或等于另一个对象?

转载 作者:行者123 更新时间:2023-11-29 19:13:38 24 4
gpt4 key购买 nike

这可能只是 JavaScript 的一个怪癖,但我很好奇是否有人知道为什么会这样:

({} <= {}) => true

({} >= {}) => true

({} == {}) => false

({} === {}) => false

({} > {}) => false

({} < {}) => false

为什么前两个是真的,而其他的都是假的?

我认为它可能在比较之前将对象转换为数字,但是......

Number({}) >= Number({}) => false

最佳答案

使用 </<=/>/>= ES5 中的运算符使用 Abstract Relational Comparison Algorithm ,这是一种奇特的说法,它在比较类型之前强制转换它们。当{}[[ToPrimitive]] 胁迫, 它回落到 toString()方法,它返回 "[object Object]"对彼此而言。因为小于/大于运算符的等式变体首先检查相等性,并且字符串相等,所以检查成功。对于非相等性检查变体,它失败了,因为,好吧,字符串是相等的。

==不使用相同的强制算法,它使用 Abstract Equality Comparison Algorithm .该算法检查的第一件事是类型是否相同——当然,对于两个裸对象,它们是相同的。因此算法继续第一步,向下检查 f:

Return true if x and y refer to the same object. Otherwise, return false.

{} 的每次使用创建一个新对象,因此此检查失败并且结果为 false。

===类似,只是没有强制步骤。它在 step 7 处失败,它使用与 AECA 的子步骤 f 相同的语言。

tl;博士:>=/<=以不同于 == 的方式强制执行/=== .

关于javascript - 为什么一个对象大于/小于或等于另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com