Javascript 为什么{}+;{}在同一个浏览器中工作会产生不同的结果
我在谷歌浏览器控制台运行是这样的 {}+{}=>“[对象对象][对象对象]” 但我在源文件中运行的是这样的 {}+{}=>NaN 我在firefox浏览器控制台中运行时是这样的Javascript 为什么{}+;{}在同一个浏览器中工作会产生不同的结果,javascript,web,browser,ecmascript-5,Javascript,Web,Browser,Ecmascript 5,我在谷歌浏览器控制台运行是这样的 {}+{}=>“[对象对象][对象对象]” 但我在源文件中运行的是这样的 {}+{}=>NaN 我在firefox浏览器控制台中运行时是这样的 {}+{}=>NaN 我正在准备另一个答案,基本上是这样的:“我不知道,但这里有一些我做过的测试,得到了类似的结果。”。但我突然意识到了真正的答案 我认为这在javascript语法中是一种未定义的行为。Chrome控制台开发人员可能意识到了这一点,无论何时在控制台中编写{}+{},它都会将代码转换为({}+{})。
{}+{}=>NaN
我正在准备另一个答案,基本上是这样的:“我不知道,但这里有一些我做过的测试,得到了类似的结果。”。但我突然意识到了真正的答案 我认为这在javascript语法中是一种未定义的行为。Chrome控制台开发人员可能意识到了这一点,无论何时在控制台中编写
{}+{}
,它都会将代码转换为({}+{})
。尝试({}+{})
或a={}+{}
,您将得到与“[object object][object object]”相同的结果。这是对javascript中的两个对象应用加号运算符的结果
然而,当您在代码段中编写一些代码时,它会按原样进行评估。它将{}+{}
计算为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 ~{}
我准备了另一个答案,基本上说,“我不知道,但这里有一些测试,我做了,得到了类似的结果”。但我突然意识到了真正的答案 我认为这在javascript语法中是一种未定义的行为。Chrome控制台开发人员可能意识到了这一点,无论何时在控制台中编写
{}+{}
,它都会将代码转换为({}+{})
。尝试({}+{})
或a={}+{}
,您将得到与“[object object][object object]”相同的结果。这是对javascript中的两个对象应用加号运算符的结果
然而,当您在代码段中编写一些代码时,它会按原样进行评估。它将{}+{}
计算为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 ~{}