JavaScript 属性访问:点表示法与括号?

2022-08-29 23:12:49

除了第一种形式可以使用变量而不仅仅是字符串文字的明显事实之外,是否有任何理由使用一个而不是另一个,如果是这样,在哪些情况下?

在代码中:

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

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

// vs. 
var x = foo.bar;

上下文:我已经编写了一个生成这些表达式的代码生成器,我想知道哪个更可取。


答案 1

(来源自此处

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

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

包括非 ASCII (UTF-8) 字符,如(更多示例)所示myForm["ダ"]

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

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

答案 2

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

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

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