为何obj["0"]+obj[0]结果为4?JS对象键名特性咨询
JS对象键的类型转换与重复键覆盖问题解释
示例代码:
let obj = { "0": 1, 0: 2 }; console.log(obj["0"] + obj[0]); // 输出4
核心原因拆解
对象键的强制字符串转换
JS里,除Symbol类型外,对象的所有键都会被自动转换为字符串类型。你写的数字键0,会被JS直接处理成字符串"0"。重复键的覆盖规则
你定义的对象里,"0": 1和0: 2本质是给同一个键"0"赋值两次。JS对象中,后续的赋值会直接覆盖之前的值,所以最终对象里实际只有"0": 2这一组有效键值对。属性访问的类型转换
访问obj["0"]时,直接匹配字符串键"0",得到值2;访问obj[0]时,数字0会先被转换成字符串"0"再匹配键,结果同样是2。两者相加就是2 + 2 = 4。
你之前误以为是“无引号键的值相乘”是错误的,JS对象不存在这种逻辑,问题本质就是键的类型强制转换和重复键的覆盖机制在起作用。
内容的提问来源于stack exchange,提问作者Mark Raiter
相关产品推荐
相关产品推荐

