我很困惑object[foo]
术语所指的是什么。任何提示?我知道bar['unique_prop']
和bar.unique_prop
指2
对象[foo]术语的含义是什么?
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
对象[foo]术语的含义是什么?
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';
这显然是一个错误或误解。此行为在Member OperatorsMDN中解释:
属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。包含数字的任何非字符串对象都通过toString方法被类型化为一个字符串。
但是,您可以使用:
object[foo.unique_prop] = 'value';
这相当于:
object[1] = 'value';
我很困惑,因为这是我第一次看到括号内的对象文字,这是一个mozilla网站的例子,我从https获得代码片段://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators – user784637 2012-02-01 12:34:32
@LedZeppelin:您引用的文档解释了这种行为,我相应地更新了我的答案。 – 2012-02-01 12:37:13
这是一样的object.whatever_x_is
其中x
是foo.toString()
这将是相同的bar.toString()
以来(除覆盖)在通用对象上调用toString
将生成一个通用的“是对象”字符串,如"[object Object]"
object[foo] = 'value';
尝试使用一个对象作为成员名称,这会导致调用.toString()
;
'value'
被分配到object["[object Object]"]
,当你试图读取alert(object[bar]);
相同toString()
发生是由于bar
也是一个对象,所以你参考object["[object Object]"]
再次,回到'value
”。
对不起,我没有完全理解这个问题,它不能被撤消。 – 2012-02-01 12:30:48
@ÁlvaroG.Vicario如果问题已关闭,它可以撤消。它可以重新打开。 :) – 2012-02-01 12:31:40
大声笑,不用担心我甚至不知道它是你 – user784637 2012-02-01 12:32:03