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%是有道理的。谢谢很乐意帮忙:)