使用'[]'表示法访问javascript对象成员而不是点符号的原因是什么?

时间:2012-04-22 11:46:16

标签: javascript

  

可能重复:
  JavaScript property access: dot notation vs. brackets?

我现在正在阅读一些开源的javascript项目代码,我发现他们有时会访问像person.name这样的对象属性,但有时他们会像person['name']一样访问。

对我而言,点符号与其他符号相当清楚。点符号很容易写和读,但在源代码中我看到它们有时使用点符号有时[]括号符号,我试图理解它的原因是什么。

可能是什么原因?

4 个答案:

答案 0 :(得分:7)

首先,它可以是动态的字符串:

 var key = 'name';
 person[key];

其次,它还支持其他不受支持的符号

 var key = 'first-name';
 person[key];

答案 1 :(得分:6)

这是一个用例(具有不可能的属性名称)

var obj = {};
> undefined
obj['first name'] = 'Ivan';
> "Ivan"
obj['first name']
> "Ivan"
obj.first\ name
> SyntaxError: Unexpected token ILLEGAL
obj.first name
> SyntaxError: Unexpected identifier

答案 2 :(得分:2)

这是使用括号的一个很好的理由,我们将属性名称作为参数传递:

function showProperty(propertyName) {
    alert(person[propertyName]);
}

showProperty('name');
showProperty('age');

这是另一个很好的理由,我们可以使用点符号访问'headers'的{​​{1}}属性,但我们可以访问request属性'Content-Type'使用点符号,因为它包含request.headers

-

答案 3 :(得分:1)

在方法中使用此表示法非常有用,例如,您将属性名称作为参数发送。

var Obj = function(){
    this.abc = function(){
        alert("abc!!!");
    };
    this.qqq = function(){
        alert("QQQ!!!");
    };
}

var showAlert = function(param){
    var myObj = new Obj();
    myObj[param]();
};

showAlert('abc');