我是编程和学习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]);
答案 0 :(得分:3)
我理解一个属性必须是一个字符串,而一个数字将是 自动输入为字符串
是的,密钥必须是字符串。如果不是,那么您传递的任何内容都将转换为字符串,包括对象。你可以阅读你写的内容:
object[foo.toString()] = 'value'
字符串化的对象为您提供'[object Object]'
。因此,实际上,您将添加和检索相同的密钥:
{'[object Object]': 'value'}