javascript objects




JavaScript属性访问:点符号与括号? (7)

(来自here

方括号表示法允许使用不能与点符号一起使用的字符:

var foo = myForm.foo[]; // incorrect syntax
var foo = myForm["foo[]"]; // correct syntax

其次,方括号表示法在处理以可预测的方式变化的属性名称时很有用:

for (var i = 0; i < 10; i++) {
  someFunction(myForm["myControlNumber" + i]);
}

围捕:

  • 点符号写得更快,读起来更清晰。
  • 方括号表示法允许访问包含特殊字符的属性和使用变量选择属性

不能与点符号一起使用的字符的另一个示例是其本身包含点的属性名称

例如,一个json响应可能包含一个名为bar.Baz的属性。

var foo = myResponse.bar.Baz; // incorrect syntax
var foo = myResponse["bar.Baz"]; // correct syntax

除了第一种形式可以使用变量而不仅仅是字符串字面这一显而易见的事实之外,是否有任何理由使用其中一种,如果是的话,在哪种情况下呢?

在代码中:

// Given:
var foo = {'bar': 'baz'};

// Then
var x = foo['bar'];

// vs. 
var x = foo.bar;

上下文:我写了一个代码生成器来产生这些表达式,我想知道哪个更好。


[]符号有用的情况:

例如,如果您的对象是动态的,并且在number[]或任何其他特殊字符的键中可能存在一些随机值,

var a = { 1 : 3 };

现在,如果你尝试访问像a.1那样会出错,因为它期望在那里有一个字符串。


使用这些符号时要小心:例如。 如果我们想访问一个窗口父窗口中的函数。 在IE中:

window['parent']['func']

不等于

window.['parent.func']

我们可以使用:

window['parent']['func'] 

要么

window.parent.func 

访问它


在JavaScript中访问属性的两种最常见的方式是带点和方括号。 value.x and value[x]在值上访问属性 - 但不一定是相同的属性。 区别在于x是如何解释的。 使用点时,点之后的部分必须是有效的变量名称,并直接命名该属性。 使用方括号时,括号内的表达式将被评估以获取属性名称。 鉴于value.x获取名为“x”的值的属性,value [x]尝试评估表达式x并将结果用作属性名称。

所以,如果你知道你感兴趣的财产被称为“长度”,你说value.length 。 如果你想提取由变量i保存的值命名的属性,你可以说value[i] 。 由于属性名称可以是任何字符串,如果您想访问名为“2”“John Doe”的属性,则必须使用方括号: value[2] or value["John Doe"] 。 即使您事先知道属性的确切名称,也是如此,因为“2” nor “John Doe”都不是有效的变量名称,所以不能通过点符号访问。

在阵列的情况下

数组中的元素存储在属性中。 因为这些属性的名称是数字,我们通常需要从变量中获取它们的名称,所以我们必须使用括号语法来访问它们。 数组的length属性告诉我们它包含了多少个元素。 这个属性名是一个有效的变量名,我们事先知道它的名字,所以为了找到一个数组的长度,你通常会写array.length因为它比array["length"]更容易编写。



括号表示法允许您按名称访问存储在变量中的属性:

var obj = { "abc" : "hello" };
var x = "abc";
var y = obj[x];
console.log(y); //output - hello

obj.x在这种情况下不起作用。


让我再添加一些方括号表示法的用例。 如果你想访问一个属性,在对象中声明x-proxy ,那么将被错误地解释。 他们还有一些其他的情况,比如空间,点等等,点操作对你无帮助。 同样,如果你有一个变量的关键字,那么只有通过括号表示才能访问对象中键的值。 希望你能获得更多的背景。





syntax