javascript中对象的属性访问器

javascript中对象的属性访问器,javascript,Javascript,如中所述,属性名称必须是字符串 对于代码 var foo = {unique_prop: 1}, obj = {}; obj[foo] = 'value'; console.log(obj[foo]); 它说, 在SpiderMonkey JavaScript引擎中,该字符串应为“['object']” 对象类型obj的属性(字符串文字)是如何存储的 属性是否存储为“”['unique_prop 1']”“?当您从变量在对象上创建属性时,JS引擎会对传递的值调用toString()方法。键的实

如中所述,属性名称必须是字符串

对于代码

var foo = {unique_prop: 1}, obj = {};
obj[foo] = 'value';
console.log(obj[foo]);
它说,

在SpiderMonkey JavaScript引擎中,该字符串应为“['object']”

对象类型
obj
的属性(字符串文字)是如何存储的


属性是否存储为“
”['unique_prop 1']”“

当您从变量在对象上创建属性时,JS引擎会对传递的值调用
toString()
方法。键的实际值已确定

您可以自己检查这种行为:

var foo={};
foo.toString=函数(){
返回“toString”;
}
var bar={};
条形图[foo]=“道具值”;
用于(以巴为单位的变量k){
控制台日志(k);

}
只需记录
obj
,您就会看到(按键将是
[object object]
)。@Teemu
console.log(object),显示,
对象{[Object Object]:“value”}
是的,在那里可以看到键:
[Object Object]
,而不是
['unique_prop 1']
。我误解你的问题了吗?@Teemu If
bar={unique\u prop:2}
然后我需要在
obj
中插入第二项,并将
bar
作为属性?属性会是什么样子?您不能,它会覆盖第一个,因为它具有相同的键,即,这只是一个重新分配。当您说
foo.toString
时,您是否覆盖
Object.toString()
?是不是
foo.prototype.toString
?@overexchange:不是,是
foo.toString()
。只有函数具有
prototype
属性,因为函数可以用作构造函数。对象没有
prototype
属性,但它们有原型(它们的构造函数的
prototype
属性)。对象是一个函数。