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

JavaScript中可以使用对象作为对象的键吗?附面试代码原理求解

输出结果

456

底层逻辑说明
  • JavaScript 普通对象的键仅支持字符串和Symbol两种类型,当你传入其他类型的值作为对象键时,JS 会自动调用该值的toString()方法,将其转换为字符串后再作为键使用。
  • 代码中的b和c都是普通对象,调用toString()方法后返回的结果统一为"[object Object]",两者转换后的字符串完全一致。
  • 执行a[b] = 123时,实际是给对象a新增了一个名为"[object Object]"的属性,赋值为123;后续执行a[c] = 456时,因为c转成字符串也是"[object Object]",相当于直接覆盖了该属性的值为456。
  • 最后打印a[b]时,仍然会先把b转成"[object Object]"去a中匹配属性,最终返回的就是最后覆盖的456。
逻辑验证

你可以添加以下打印语句验证转换规则:

console.log(b.toString()) // 输出 "[object Object]"
console.log(c.toString()) // 输出 "[object Object]"
console.log(Object.keys(a)) // 输出 ["[object Object]"]
拓展方案

如果你有使用对象作为唯一键的需求,可以使用ES6新增的Map数据结构,Map的键支持任意类型的值,不会自动做字符串转换:

const map = new Map()
const b = {key: 'b'}
const c = {key: 'c'}
map.set(b, 123)
map.set(c, 456)
console.log(map.get(b)) // 输出 123
console.log(map.get(c)) // 输出 456

内容的提问来源于stack exchange,提问作者Suleman Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:09:05