【发布时间】:2019-02-11 23:45:48
【问题描述】:
为什么会这样
{}+{} 输出 - NaN
({} + {}) 输出- ''[对象对象][对象对象]''
为什么要显示这样的结果?
【问题讨论】:
标签: javascript
为什么会这样
{}+{} 输出 - NaN
({} + {}) 输出- ''[对象对象][对象对象]''
为什么要显示这样的结果?
【问题讨论】:
标签: javascript
当您以某种方式编写{} 时,如果“重复”答案所说的是正确的,它可能会被解释为代码块而不是空对象。空块没有return语句,所以返回undefined。
undefined + undefined 返回 NaN,因为它试图在两个非数字值之间进行数学加法。当您编写 {} + {} 但不对结果执行任何操作时,Chrome 会再次将 + 评估为加法,并将 {} 评估为未定义。
但是,一旦您对结果进行实际操作,行为就会有所不同因为浏览器知道您使用的是隐式对象声明语法。如果你说var x = {} + {},Chrome 会创建两个对象并尝试将它们转换为可以与+ 运算符一起使用的值。因此它将对象转换为字符串表示形式并将字符串连接在一起。
当你使用括号时也会发生同样的事情,因为这样的括号内不能存在块,所以它不会将{} 误认为是一个空块。
PS:一开始我错了,我现在只是把我在另一个答案上读到的内容。
【讨论】:
{} 未评估为 undefined。绝对没有undefined 参与任何表达式。
{} 并返回 undefined。