为什么{} - 1
在浏览器JavaScript中给出-1结果?
根据我对类型强制在这里如何工作的理解,第一个valueOf()将在{}
上被调用,这不是原始值,因此将调用下一个toString()
,这给出了[object Object]
.这将得到'[object Object]' - 1
,即NaN,但实际上结果是-1.
根据我的理解,在 node 中,这似乎是有效的,因为结果是NaN在那里.
为什么{} - 1
在浏览器JavaScript中给出-1结果?
根据我对类型强制在这里如何工作的理解,第一个valueOf()将在{}
上被调用,这不是原始值,因此将调用下一个toString()
,这给出了[object Object]
.这将得到'[object Object]' - 1
,即NaN,但实际上结果是-1.
根据我的理解,在 node 中,这似乎是有效的,因为结果是NaN在那里.
在控制台中,由于相关原因,{} - 1
的判断就像您输入的那样
{
// no statements
}
-1;
这是一个块声明,后面跟着表达-1
.
如果您输入({} - 1)
以强制计算为表达,则会得到NaN
.
控制台REPL不仅仅是一个表达判断器;它try 判断和运行您输入的任何内容,作为一个陈述序列.以{
开头的陈述始终被消除为陈述块的开始,而不是对象初始化器.