Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 为什么节点REPL会根据它是否';是否为变量赋值? 让我们考虑终端中的下列输入 ✗ 节点 欢迎使用Node.jsv13.1.0。 键入“.help”以获取更多信息。 >设a=13 未定义 >{}+a.toString() 13 >//但是 未定义 >设b={}+a.toString() 未定义 >b “[object]13”_Javascript_Node.js - Fatal编程技术网

Javascript 为什么节点REPL会根据它是否';是否为变量赋值? 让我们考虑终端中的下列输入 ✗ 节点 欢迎使用Node.jsv13.1.0。 键入“.help”以获取更多信息。 >设a=13 未定义 >{}+a.toString() 13 >//但是 未定义 >设b={}+a.toString() 未定义 >b “[object]13”

Javascript 为什么节点REPL会根据它是否';是否为变量赋值? 让我们考虑终端中的下列输入 ✗ 节点 欢迎使用Node.jsv13.1.0。 键入“.help”以获取更多信息。 >设a=13 未定义 >{}+a.toString() 13 >//但是 未定义 >设b={}+a.toString() 未定义 >b “[object]13”,javascript,node.js,Javascript,Node.js,问题是,为什么当您计算{}+a.toString()REPL时会显示数字13,但当您将其分配给变量时,它等于预期的字符串'[object]13' 这种行为至少在V8(Node和Chrome)中发生。这里的根本问题是JS中的{..}在语法上是块语句还是对象文本表达式,这取决于上下文(应该是语句还是表达式)。在第二种情况下,这显然是一种表达: let b = /*expression context*/ 因此,{}是一个对象文本。在第一种情况下,它位于语句上下文中,因此被解释为: {} //

问题是,为什么当您计算
{}+a.toString()
REPL时会显示数字13,但当您将其分配给变量时,它等于预期的字符串
'[object]13'


这种行为至少在V8(Node和Chrome)中发生。

这里的根本问题是JS中的
{
..
}
在语法上是块语句还是对象文本表达式,这取决于上下文(应该是语句还是表达式)。在第二种情况下,这显然是一种表达:

 let b = /*expression context*/
因此,
{}
是一个对象文本。在第一种情况下,它位于语句上下文中,因此被解释为:

  {} // an empty block statement
  + a.toString() // a unary plus operator on "13"

我猜
{}
是块语句。repls/consoles很奇怪。例如,
{a+3}
是一个块,
{a:3}
不是。有一刻我怀疑我对JavaScript的理解这100%是有道理的。谢谢很乐意帮忙:)