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
相关产品推荐
相关产品推荐

