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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:36:04