Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么{}+;{}在同一个浏览器中工作会产生不同的结果_Javascript_Web_Browser_Ecmascript 5 - Fatal编程技术网

Javascript 为什么{}+;{}在同一个浏览器中工作会产生不同的结果

Javascript 为什么{}+;{}在同一个浏览器中工作会产生不同的结果,javascript,web,browser,ecmascript-5,Javascript,Web,Browser,Ecmascript 5,我在谷歌浏览器控制台运行是这样的 {}+{}=>“[对象对象][对象对象]” 但我在源文件中运行的是这样的 {}+{}=>NaN 我在firefox浏览器控制台中运行时是这样的 {}+{}=>NaN 我正在准备另一个答案,基本上是这样的:“我不知道,但这里有一些我做过的测试,得到了类似的结果。”。但我突然意识到了真正的答案 我认为这在javascript语法中是一种未定义的行为。Chrome控制台开发人员可能意识到了这一点,无论何时在控制台中编写{}+{},它都会将代码转换为({}+{})。

我在谷歌浏览器控制台运行是这样的

{}+{}=>“[对象对象][对象对象]”

但我在源文件中运行的是这样的

{}+{}=>NaN

我在firefox浏览器控制台中运行时是这样的
{}+{}=>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 ~{}