2011-08-18 72 views
4

我一直在使用Javascript中的方括号表示法来创建和调用关联数组。如何在点符号中使用变量,如方括号表示法

在本例中,我明白方括号表示法允许您使用变量来调用数组中的某个对象。

你会如何在点符号中做这样的事情?

var item = {}; 
    item['1'] = 'pen'; 

var x = 1; 

console.log(item[x]); // console will show 'pen' 

回答

19

不能使用以点表示变量(短使用eval,你想要做的)。使用点符号,属性名称本质上是一个常量。

myObj.propName 
// is equivalent to 
myObj["propName"] 
+1

-1因为它是错误的。看到我的答案。第一行中的'propName'被视为属性,而不是变量! – sjngm

+3

@sjngm我不同意。@nnnnnn并不意味着'propName'是一个变量,而是一个属性的名称。 –

+0

@zack好吧,然后一个不同的名字会更好。它说“等同于”意味着第一行与第三行完成相同的事情。这不是事实。 – sjngm

6

如果用数字来访问你必须数组使用括号:

item[0] 

var k = 0; 
item[k] 

item.0 

不起作用(错误的语法)。

如果你使用一个字符串

item["key"] 

var p = "key"; 
item[p] 

等于

item.key 

在后一种情况下

var p = "key"; 
item.p 

会导致错误的输出p不作为变量这里治疗。

+0

谢谢,我没有具体询问一个数字,我只是没有想到一个更好的标识符。但是,这也是了解数字的好消息。 –

2

点符号仅限于某些字符...看到this question ......在方括号可以让你打破限制:

var item = {}; 
item['very long variable name containing empty spaces ... and dots...'] = 'valid var'; 
item.1 = 'not valid var'; // will not work; 
item['1'] = 'valid var'; // will do just fine... 
6

简短的回答是:你不能访问除非您知道酒店的名称,否则酒店将使用dot notation

点符号还会限制您可以访问的属性名称,因为属性名称必须是有效的JavaScript标识符。例如,如果您有一个名为my prop(或更好,my%prop)的属性,则不可能在不使用bracket notation的情况下访问它,因为这会导致大多数情况下出现语法错误。

Member Operators page on MDN解释了这一点。

顺便说一句:

岂不是有点混乱,以便能够动态地查找使用点符号属性?

item.x // is this the property "x" or do I have to look up variable "x"? 
+0

感谢您的参考链接。是的,现在我想到了,这会让人困惑。我只是不知道是否有办法。 –

相关问题