为什么同一浏览器中的{} + {}具有不同的结果

时间:2016-04-16 08:55:18

标签: javascript web browser ecmascript-5

我在Google浏览器控制台中运行就像这样

{} + {} => " [object Object] [object Object]"

enter image description here

但我在源文件中运行就像这样

{} + {} =>为NaN

enter image description here 我在firefox浏览器控制台中运行就像这样 {} + {} => NaN

enter image description here

1 个答案:

答案 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 ~{}