Javascript括号表示法访问存储在另一个变量中的属性/键

时间:2016-09-19 03:50:55

标签: javascript properties key

所以我正在阅读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]来引用它吗?

2 个答案:

答案 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.b42。您也可以选择var c = "a"obj[c]

obj[b]正在使用变量b。由于b"a"obj[b]将评估为obj["a"],然后评估为"hello world"