首页 > 解决方案 > 测试对象文字中的相等性时的奇怪行为

问题描述

行为示例。

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

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

foo({}) //Returns true! 

有人能解释这种行为吗?

标签: javascript

解决方案


对此的简单回答是因为表达式{} === {}采用两个对象文字,而在函数中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 时,它会短路到11.9.3cfalse中定义的。


推荐阅读