所以我正在阅读YDKJS系列,我想到了这一点,我希望更多的帮助理解this:
当然,如果要访问属性/键但名称存储在另一个变量中,括号表示法也很有用,例如:
var obj = { a: "hello world", b: 42 }; var b = "a"; obj[b]; // "hello world" obj["b"]; // 42
我无法理解var b = "a";
部分。为什么它不是b
它自己的包含字符串"a"
的变量?它超出了obj
的范围,但它引用了obj
中的变量?如果var b
现在是obj的一部分,您可以使用obj[b]
来引用它吗?
答案 0 :(得分:0)
所有属性都可以通过括号表示法访问,属性名称可以作为字符串访问。考虑一下:
'Hello world'.length
相当于:
'Hello world'['length']
如您所见,可以使用括号和属性的字符串表示来访问该属性。所以在这个例子中:
var obj = {
a: "hello world",
b: 42
};
var b = "a";
obj[b]; // "hello world"
obj["b"]; // 42
变量b
只存储字符串'a',然后像这样使用:
obj[b] == obj["a"]
以上,obj[b]
与obj["a"]
相同。
你变得困惑。变量b
和"b"
未关联。变量b
的值为"a"
。
'a'只是替换,访问a属性,返回'Hello world'。第二次访问b属性返回42
答案 1 :(得分:0)
Xufox回答了我的问题:
不,
b
是"a"
。它与obj
无关。obj[b]
为obj["a"]
,obj.a
为"hello world"
。obj["b"]
为obj.b
,42
。您也可以选择var c = "a"
和obj[c]
。
obj[b]
正在使用变量b
。由于b
为"a"
,obj[b]
将评估为obj["a"]
,然后评估为"hello world"
。