javascript - 测试对象文字中的相等性时的奇怪行为
问题描述
在对象文字中测试相等性时,{} === {}
返回 false(也是如此[] === []
)。但是,如果您编写一个函数来执行相同的测试并将对象文字作为参数传递,则比较返回 true。
function foo(value) {
return value === value
}
foo({}) //Returns true!
有人能解释这种行为吗?
解决方案
对此的简单回答是因为表达式{} === {}
采用两个对象文字,而在函数中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
中定义的。
推荐阅读
- ruby-on-rails - 使用 Devise 令牌身份验证时如何更新没有令牌的用户?
- go - 类型转换函数从库加载到具有空接口参数的函数
- powershell - 移动带有例外文件的文件夹
- javascript - filter 和 orderBy 在不同的领域
- control-m - 如何让一个虚拟作业在 controlm 中运行 30 分钟
- json - “显示未处理数据的脚本错误
- sql - 在 SELECT 语句中使用“上一个”列的结果
- python - 从 pyodbc 调用时,CREATE PROCEDURE 静默失败
- uml - 计算布尔运算的出现次数
- sumo - 在运行'example/sumo/grid.py'.FatalFlowError:'没有足够的车辆产生!糟糕的开始?