为什么console.log(Object +1)的输出为function Object(){[native code]}1?
为什么
Object + 1会输出函数字符串拼接1,而不是数值? 先看你执行的代码:
console.log(Object +1)
输出结果是:
function Object() { [native code] }1
原因在于以下几点:
Object是JavaScript内置的构造函数,属于对象类型(函数在JS里是特殊的对象)。当对象参与加法运算时,会先按照ECMAScript的ToPrimitive规则转换为原始值。- 对于函数对象,
ToPrimitive转换会优先调用其toString()方法,而非valueOf()。Object.toString()返回的是描述该原生函数的字符串:"function Object() { [native code] }"。 - 此时加法运算的一侧是字符串,另一侧是数字
1,根据加法规则,数字会被转换为字符串"1",最终执行字符串拼接,得到你看到的结果。
你预期的数值加法不会触发,因为对象转原始值时先得到了字符串,直接进入了字符串拼接的分支,而非走到“双方转数字相加”的逻辑。
如果想要尝试将Object转为数值后相加,可以手动调用Number()转换:
console.log(Number(Object) + 1) // 输出 NaN,因为函数无法转为有效数字
内容的提问来源于stack exchange,提问作者Zyad
相关产品推荐
相关产品推荐

