You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何obj["0"]+obj[0]结果为4?JS对象键名特性咨询

JS对象键的类型转换与重复键覆盖问题解释

示例代码:

let obj = {
    "0": 1,
    0: 2
};

console.log(obj["0"] + obj[0]); // 输出4

核心原因拆解

  1. 对象键的强制字符串转换
    JS里,除Symbol类型外,对象的所有键都会被自动转换为字符串类型。你写的数字键0,会被JS直接处理成字符串"0"。

  2. 重复键的覆盖规则
    你定义的对象里,"0": 1和0: 2本质是给同一个键"0"赋值两次。JS对象中,后续的赋值会直接覆盖之前的值,所以最终对象里实际只有"0": 2这一组有效键值对。

  3. 属性访问的类型转换
    访问obj["0"]时,直接匹配字符串键"0",得到值2;访问obj[0]时,数字0会先被转换成字符串"0"再匹配键,结果同样是2。两者相加就是2 + 2 = 4。

你之前误以为是“无引号键的值相乘”是错误的,JS对象不存在这种逻辑,问题本质就是键的类型强制转换和重复键的覆盖机制在起作用。

内容的提问来源于stack exchange,提问作者Mark Raiter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:25:23