JavaScript REPL中[]+{}直接运行与赋值后结果不同的原因
Node REPL中
[]+{}与let x = []+{}显示差异的原因 首先,[]+{}的运算结果确实是'[object Object]',这是JavaScript类型转换的标准行为:
- 数组
[]参与加法运算时会被转换为字符串,调用Array.prototype.toString()得到空字符串'' - 对象
{}转换为字符串时调用Object.prototype.toString()得到'[object Object]' - 两者执行加法操作时会进行字符串拼接,最终结果为
'[object Object]'
你看到的差异并不是变量x的值为undefined,而是Node REPL的输出逻辑导致的:
- 当你执行单独的表达式(比如
[]+{})时,REPL会自动输出该表达式的计算结果 - 当你执行
let x = []+{}这类变量声明语句时,JavaScript规范规定let声明语句本身的返回值是undefined,所以REPL会显示undefined。但变量x的实际值仍然是'[object Object]',你可以在REPL中直接输入x并执行,就能看到正确的值。
内容的提问来源于stack exchange,提问作者Florian Wörister
相关产品推荐
相关产品推荐

