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

JavaScript中是否可以声明存在同名键的Object对象

JavaScript 中是否可以声明存在重复键名的 Object 对象?

结论:标准原生普通 Object 不支持重复键名,你给出的示例写法不会生成多个同名键属性,后写的键值会直接覆盖前面的同键值。

你给出的代码实际运行效果如下:

let Obj = {
   '1' : '1',
   '1' : '1',
   '1' : '1',
}
console.log(Obj); // { '1': '1' }
console.log(Object.keys(Obj).length); // 1

ECMAScript 规范明确要求,普通对象的属性键(包含字符串键、数字键、Symbol键,其中数字键会被自动转换为字符串存储)必须唯一。解析对象字面量时,只要出现重复键,引擎会直接保留最后一次声明的键值对,前面的同键条目会被直接丢弃,不存在任何兼容标准的语法能让普通Object存储多个同名属性。

如果你的业务场景确实需要存储重复键的键值对,可以用以下两种可行方案替代:

  • 用键值对元组数组存储,完全支持重复键,可严格保留插入顺序
// 每个元素为 [键, 值] 结构的数组
const pairList = [
  ['1', '第一个值'],
  ['1', '第二个值'],
  ['1', '第三个值']
]
// 取出键为'1'的所有值
const allValuesOfKey1 = pairList.filter(([key]) => key === '1').map(([, value]) => value)
console.log(allValuesOfKey1); // ['第一个值', '第二个值', '第三个值']
  • 如果需要保留对象按键快速访问的特性,可以将单个键的对应值初始化为数组,同键的多个值都存在数组中
const multiValueObj = {}
// 封装追加值的方法,避免直接赋值覆盖
function setItem(obj, key, value) {
  if (!Array.isArray(obj[key])) {
    obj[key] = []
  }
  obj[key].push(value)
}

setItem(multiValueObj, '1', '1')
setItem(multiValueObj, '1', '2')
setItem(multiValueObj, '1', '3')
console.log(multiValueObj['1']); // ['1', '2', '3']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:06:17