如何在点符号中使用变量,如方括号表示法

Pau*_*ham 7 javascript

我一直在Javascript中使用方括号表示法来创建和调用关联数组.

在这个例子中,我理解方括号表示法允许您使用变量来调用数组中的某个对象.

你会用点符号做这样的事情吗?

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

var x = 1;

console.log(item[x]);  // console will show 'pen'
Run Code Online (Sandbox Code Playgroud)

nnn*_*nnn 29

不能使用以点表示的变量(使用短的eval,你希望这样做).使用点表示法,属性名称基本上是常量.

myObj.propName
// is equivalent to
myObj["propName"]
Run Code Online (Sandbox Code Playgroud)

  • @sjngm我不同意.@nnnnnn并不暗示`propName`是一个变量,而是一个属性的名称. (4认同)

Zac*_*man 7

简短的回答是:除非您知道该属性的名称,否则无法使用点表示法访问该属性.

点表示法还对您可以访问的属性名称设置限制,因为属性名称必须是有效的JavaScript标识符.例如,如果您有一个名为my prop(或更好my%prop)的属性,那么在不使用括号表示法的情况下将无法访问它,因为在大多数情况下会导致语法错误.

MDN上的 " 成员运营商"页面进一步解释了这一点.

作为旁白:

能够使用点表示法动态查找属性会不会有点混乱?

item.x // is this the property "x" or do I have to look up variable "x"?
Run Code Online (Sandbox Code Playgroud)


sjn*_*ngm 6

如果使用数字访问数组,则必须使用括号:

item[0]

var k = 0;
item[k]
Run Code Online (Sandbox Code Playgroud)

item.0
Run Code Online (Sandbox Code Playgroud)

不起作用(语法错误).

如果你使用字符串

item["key"]

var p = "key";
item[p]
Run Code Online (Sandbox Code Playgroud)

等于

item.key
Run Code Online (Sandbox Code Playgroud)

在后一种情况下

var p = "key";
item.p
Run Code Online (Sandbox Code Playgroud)

会导致错误的输出,因为p这里没有被视为变量.