【问题标题】:Odd behaviour when testing for equality in object literals [duplicate]测试对象文字中的相等性时的奇怪行为[重复]
【发布时间】:2019-11-20 00:18:03
【问题描述】:

Example of the behaviour.

在对象文字中测试相等性时,{} === {} 返回 false([] === [] 也是如此)。但是,如果您编写一个函数来执行相同的测试并将对象文字作为参数传递,则比较返回 true。

function foo(value) {
    return value === value
} 

foo({}) //Returns true! 

有人能解释这种行为吗?

【问题讨论】:

  • {}{} === {} 中的两个不同对象,但 value 是同一个对象。

标签: javascript


【解决方案1】:

这个问题的简单答案是因为表达式{} === {} 使用了两个对象literals,而在函数foo 中你使用了一个单数 value并将其与自身进行比较。事实上,foo总是返回true(见编辑)。

更好的方法是:

const a = {}
const b = {}

console.log(a === b) // false, symmetric to {} === {}
console.log(a === a) // true, symmetric to (val) => val === val

编辑:Ryan 确实指出,当通过 NaN 时,它会短路到 false,如 11.9.3c 中定义的那样。

【讨论】:

  • 最后一部分是不真实的,如果通过 NaN,foo 将返回 false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多