我有些困惑 object[foo]
这个术语具体指的是什么。有什么提示吗? 我知道 bar['unique_prop']
和 bar.unique_prop
分别指向 2
var foo = {unique_prop: 1};
var bar = {unique_prop: 2};
var object = {};
object[foo] = 'value';
alert(object[bar]);
我有些困惑 object[foo]
这个术语具体指的是什么。有什么提示吗? 我知道 bar['unique_prop']
和 bar.unique_prop
分别指向 2
var foo = {unique_prop: 1};
var bar = {unique_prop: 2};
var object = {};
object[foo] = 'value';
alert(object[bar]);
这个:
var foo = 'abc';
object[foo]
等同于:
object.abc
var foo = {unique_prop: 1};
object[foo] = 'value';
没有太多意义(对象属性名不能是对象字面量)。JS引擎将使用foo.toString()
(例如返回"[object Object]"
),因此实际上你正在做这件事:
var foo = {unique_prop: 1};
object["[object Object]"] = 'value';
这显然是一个错误或误解。成员运算符 在 MDN 上有详细解释:
属性名必须是字符串。这意味着非字符串对象不能用作对象键。任何非字符串对象,包括数字,都会通过toString方法转换为字符串。
但是你可以使用以下内容:
object[foo.unique_prop] = 'value';
这相当于:
object[1] = 'value';
它与object.whatever_x_is
相同,其中x
是foo.toString()
,这将与bar.toString()
相同,因为(除非被覆盖),在通用对象上调用toString
将生成一个通用的“是一个对象”的字符串,例如"[object Object]"
object[foo] = 'value';
尝试将对象用作成员名称,这会导致调用.toString()
;
'value'
被分配给object["[object Object]"]
,当您尝试读取alert(object[bar]);
时,由于bar
也是一个对象,因此发生了相同的toString()
,因此您再次引用object["[object Object]"]
并返回'value'
。