由对象属性输出混淆

时间:2015-06-30 21:59:55

标签: javascript object

我是编程和学习JavaScript并尝试理解对象和属性名称的新手。在下面的示例中(来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors),课程声明此代码(下面)输出“value”,因为foo和bar都转换为相同的字符串。我理解一个属性必须是一个字符串,并且一个数字将自动输入为字符串,但我不明白为什么foo和bar都会解析为'value'。对我来说,似乎最后一行代码应该解析为'2',因为var bar = 2.我缺少什么?谢谢!

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);

1 个答案:

答案 0 :(得分:3)

  

我理解一个属性必须是一个字符串,而一个数字将是   自动输入为字符串

是的,密钥必须是字符串。如果不是,那么您传递的任何内容都将转换为字符串,包括对象。你可以阅读你写的内容:

object[foo.toString()] = 'value'

字符串化的对象为您提供'[object Object]'。因此,实际上,您将添加和检索相同的密钥:

{'[object Object]': 'value'}