JavaScript中obj[{key:'value'}] = 'value'写法的含义是什么?
语法说明
基础规则
JavaScript 普通对象的键仅支持 字符串 和 Symbol 两种类型。当你使用方括号语法给对象赋值/取值时,如果传入了其他类型作为键,JS 会自动调用该值的 toString() 方法转换为字符串,再作为实际的键使用。
示例代码行为解析
你给出的示例中,{key:"instagram"} 和 {key:"facebook"} 都属于普通对象类型,调用 toString() 方法后得到的结果都是固定字符串 "[object Object]",因此:
- 第二行
obj[{key:"instagram"}] = "Akrixa"实际等价于obj["[object Object]"] = "Akrixa" - 第三行
obj[{key:"facebook"}] = "Coding with Akrixa"实际等价于obj["[object Object]"] = "Coding with Akrixa",会直接覆盖上一行给同一个键赋的值
最终你执行console.log(obj[{key: "instagram"}])时,输出的结果是Coding with Akrixa,而不是预期的Akrixa,就是因为两个对象转换为字符串后对应同一个键。
obj[{key:"value"}] = "value" 写法的作用
这种写法在普通对象的使用场景下没有实际价值,属于典型的语法误用:所有传入的对象类型的键都会被转换为同一个字符串,最终只会保留最后一次赋值的结果。
如果你确实需要用复杂类型作为键存储数据,建议使用 ES6 新增的 Map 数据结构,Map 支持任意类型的值作为键,不会自动做类型转换,使用示例如下:
const map = new Map(); const insKey = {key:"instagram"}; const fbKey = {key:"facebook"}; map.set(insKey, "Akrixa"); map.set(fbKey, "Coding with Akrixa"); console.log(map.get(insKey)); // 输出 Akrixa,符合预期
内容的提问来源于stack exchange,提问作者Rishabh Sharma
相关产品推荐
相关产品推荐

