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

Object.keys()能否返回对象列表?如何获取作为键的Person实例

如何用对象作为键并获取原始对象,以及Object.keys()的返回规则

你当前的代码里,expense的键并不是Person对象,而是字符串"caio"和"rafael"——在对象字面量中直接写变量名作为键时,JavaScript会把它解析成对应的字符串,而非变量指向的对象。如果想把对象作为键,得用计算属性语法(方括号包裹变量),但这里还有个关键限制:

JavaScript普通对象的键只能是字符串或Symbol类型,任何其他类型的键都会被强制转换为字符串。比如你用Person对象作为计算属性键时,它会被转成"[object Object]",这会导致多个对象对应同一个键,后面的值覆盖前面的,完全达不到你想要的效果。

解决方案:用Map存储对象键

如果需要关联Person对象和对应的费用,推荐使用Map,它允许任何类型(包括对象)作为键,且能保留键的原始类型:

const caio = new Person("Caio")
const rafael = new Person("Rafael")

// 创建Map并关联对象与费用
const expenseMap = new Map()
expenseMap.set(caio, 10)
expenseMap.set(rafael, 0)

// 获取所有Person对象键
const personKeys = Array.from(expenseMap.keys())
console.log(personKeys) // [Person { name: 'Caio' }, Person { name: 'Rafael' }]

// 遍历Map获取键值对
expenseMap.forEach((amount, person) => {
  console.log(`${person.name} 的费用是 ${amount}`)
})

Object.keys()能否返回对象列表?

不能。Object.keys()的设计目标是返回对象自身可枚举的字符串键组成的数组。如果对象的键是Symbol类型,需要用Object.getOwnPropertySymbols()获取,但同样,非字符串/Symbol类型的键会被强制转换,所以普通对象根本无法存储对象类型的键,自然也不可能通过Object.keys()返回对象列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:35:24