为何在JavaScript中[undefined]-3等于-3,而undefined-3却为NaN?
为什么
undefined - x返回NaN,而[undefined] - x返回-x? 1. 解析undefined - 3的结果
JavaScript的减法运算会自动将非数字操作数转为数字类型:
undefined作为原始值,调用Number(undefined)得到的结果是NaN。- 而
NaN和任何数值运算的结果始终是NaN,因此undefined - 3最终返回NaN。
2. 解析[undefined] - 3的结果
数组属于对象类型,在减法运算中会触发对象转原始值的流程:
- 先调用数组的
valueOf()方法,返回数组本身(仍是对象),转换未完成。 - 接着调用
toString()方法,[undefined].toString()会把数组元素转为字符串拼接,其中undefined转字符串是空值,最终得到空字符串""。 - 空字符串通过
Number("")转为数字0,执行0 - 3后结果就是-3。
代码验证
console.log(undefined-3); //NaN console.log([undefined]-3); // -3 // 中间步骤验证: console.log(Number(undefined)); // NaN console.log([undefined].toString()); // "" console.log(Number("")); // 0
内容的提问来源于stack exchange,提问作者Anshuman Sharma
相关产品推荐
相关产品推荐

