2016-09-19 49 views
0

所以我要通过YDKJS系列和我碰到此位,我想更多的帮助,理解this来到一个属性/键:的Javascript括号符号来访问存储在另一个变量

当然,支架注释也非常有用,如果你想访问属性/关键,但名字被存储在另一个变量,如:

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

不,'b'是''a“'。它与'obj'无关。 'obj [b]'是'obj [“a”]'',它是''hello world''的'obj.a'。 'obj [“b”]'是'obj.b',它是'42'。你可以选择'var c =“a”'和'obj [c]'来代替。 – Xufox

+0

OH ok。得到它了。谢谢。-duh- – Burt

回答

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只是存储字符串“一”,然后像这样使用:

obj[b] == obj["a"] 

以上,obj[b]是一样的obj["a"]

你已经变得困惑。变量b"b"未关联。变量b具有值"a"

'a'刚刚被替换,它访问一个属性,返回'Hello world'。第二接入b属性返回42

+0

本网站有多久可以接受答案的时间限制。我将在几分钟内接受:)。 – Burt

+0

@Burt没问题。如果您有任何其他问题,我会很乐意提供帮助! – Li357

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"