【发布时间】:2015-06-30 21:59:55
【问题描述】:
我对编程和学习 JavaScript 以及试图理解对象和属性名称还很陌生。在以下示例中(来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors),课程说明此代码(如下)输出“value”,因为 foo 和 bar 都转换为相同的字符串。我知道属性必须是字符串,并且数字会自动输入为字符串,但我不明白为什么 foo 和 bar 都解析为“值”。对我来说,由于 var bar = 2,最后一行代码似乎应该解析为“2”。我错过了什么?谢谢!
var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);
【问题讨论】:
-
键不能是对象。发生的情况是对象将被字符串化,最终得到
{'[object Object]': 'value'} -
@elclanrs:嗯,对象可以是键,正如我们在上面看到的,但这不是我们所需要的,因为所有数据对象都会产生相同的键。
-
你可能想要
object[foo.unique_prop] -
试试
console.log(foo.toString());和console.log(bar.toString());这会给你同样的字符串'[object Object]'。所以object{'[object Object]': 'value'}将是结果。 -
值得注意的是,在 ECMA-262 ed 6 中有 computed property names 和 map 允许对象作为键的对象。
标签: javascript object