我在Google浏览器控制台中运行就像这样
{} + {} => " [object Object] [object Object]"
但我在源文件中运行就像这样
{} + {} =>为NaN
答案 0 :(得分:0)
我正在准备另一个答案,基本上说,"我不知道,但这里有一些我做过的测试并得到了类似的结果"。但突然间我意识到了真正的答案。
我认为这在javascript语法中有些未定义的行为。 Chrome控制台开发人员可能都知道这一点,每当您在控制台中编写{}+{}
时,它都会将代码转换为({}+{})
。试试({}+{})
或a={}+{}
,您将在"[object Object][object Object]"
处获得相同的结果。这是在javascript中将plus运算符应用于两个对象的结果。
但是,当您在代码段中编写一些代码时,它会按原样进行评估。它会将{}+{}
计算为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 ~{}