【发布时间】:2016-08-08 07:29:12
【问题描述】:
我在谷歌浏览器控制台运行是这样的
{}+{} => "[对象对象][对象对象]"
但是我在源文件中运行是这样的
{}+{} => NaN
【问题讨论】:
标签: javascript web browser ecmascript-5
我在谷歌浏览器控制台运行是这样的
{}+{} => "[对象对象][对象对象]"
但是我在源文件中运行是这样的
{}+{} => NaN
【问题讨论】:
标签: javascript web browser ecmascript-5
我正在准备另一个答案,基本上说:“我不知道,但这里有一些我做过的测试并得到了类似的结果”。但突然间我意识到了真正的答案。
我认为这在 javascript 语法中是一种未定义的行为。 Chrome 控制台开发人员可能已经意识到这一点,每当您在控制台中写入 {}+{} 时,它会将代码转换为 ({}+{})。尝试({}+{}) 或a={}+{},您将在任何地方得到相同的结果,即"[object Object][object Object]"。这是在 javascript 中对两个对象应用加号运算符的结果。
但是,当您在 sn-p 中编写一些代码时,它会按原样进行评估。它会将{}+{} 计算为NaN。但是NaN并不是两个对象相加的结果。 {} 是对象构造函数字面量。但它也用于范围。所以评估的内容等于:
{ // Open scope
// You can write any working code here
// Only the result of the last statement is printed to console
} // Close scope
+{} // Result of this is NaN
// + is the unary number cast operator not the binary addition operator
您可以通过使用一元运算符来确认这一点。以此为例:
{}~{}
// Error in Chrome console as it is turned into ({}~{}) which is bad syntax
// -1 in eval as it is the result of ~{}
【讨论】: