为什么对象大于/小于或等于不同的对象
Why is an object greater/less than or equal to a different object?
这可能
只是JavaScript的一个奇怪怪癖,但我很好奇是否有人知道为什么会这样:
({} <= {}) => true
({} >= {}) => true
({} == {}) => false
({} === {}) => false
({} > {}) => false
({} < {}) => false
既然其他两个都是假的,为什么前两个都是真的?
我认为在比较之前可能是将对象转换为数字,但是......
Number({}) >= Number({}) => false
在 ES5 中使用 <
/<=
/>
/>=
运算符使用抽象关系比较算法,这是一种奇特的说法,它在比较类型之前强制类型。当{}
被[[ToPrimitive]]
强制时,它会回退到 toString()
方法,该方法为两者返回"[object Object]"
。由于小于/大于运算符的等于变体首先检查相等性,并且字符串相等,因此检查成功。对于非相等检查变体,它失败了,因为字符串是相等的。
==
不使用相同的强制算法,而是使用抽象相等比较算法。该算法检查的第一件事是类型是否相同 - 当然,对于两个裸对象,它们是相同的。因此,算法继续第一步,并向下检查 f:
如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。
每次使用 {}
都会创建一个新对象,因此此检查失败,结果为 false。
===
相似,只是没有胁迫步骤。它在步骤 7 中失败,该步骤 7 使用与 AECA 的子步骤 f 相同的语言。
博士:>=
/<=
胁迫的方式与==
/===
不同。
相关文章:
- JavaScript - 构造对象的不同方法
- “add”函数适用于不同的链接/参数组合
- 日期对象和ISO日期对象返回不同的日期
- 为什么这些对象具有不同的构造函数
- 如何为不同的对象设置不同的灯箱
- 适用于不同设备的响应式画布
- 不同的 CSS 适用于不同的屏幕尺寸
- 将ajax数据返回到对应于不同链接的不同函数
- 自动点击按钮存在于不同的网页在javascript
- 根据已单击的页面从对象的不同数组中进行选择
- Javascript中的作用域错误.调用该对象的不同方法中的方法
- 为webgl中的每个对象使用不同的顶点和片段着色器
- Emberjs -循环遍历数组'each',但每三个对象执行不同的操作
- 当前对象属性作为同一对象中不同属性的值
- 根据对象的不同,在转换对象时考虑旋转
- 如果图像文件存在于不同的驱动器中,如何在js/Jquery中给出图像路径
- Javascript函数内部对象的不同
- Do window.postMessage()适用于不同服务器上的不同应用程序
- 如何在不重写现有代码的情况下将jquery代码应用于不同的目标
- 传递事件和此对象到不同范围内的函数