2

可能重复:
JavaScript 属性访问:点符号与括号?

我现在正在阅读一些开源 javascript 项目代码,我看到有时他们访问对象属性,person.name但有时他们访问person['name']

对我来说,点符号相对于其他符号非常清楚。点表示法易于编写和阅读,但在源代码中我看到它们有时使用点表示法,有时 [] 大括号表示法,我试图理解它的原因是什么。

这可能是什么原因?

4

4 回答 4

7

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

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

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

 var key = 'first-name';
 person[key];
于 2012-04-22T11:49:31.857 回答
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
于 2012-04-22T11:48:49.887 回答
2

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

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

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

这是另一个很好的理由,我们可以访问 using dot-notation 的'headers'属性request,但我们不能访问 using dot-notation 的'Content-Type'属性request.headers,因为它包含一个-.

request.headers['Content-Type'] = 'text/html';
于 2012-04-22T11:48:49.000 回答
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');
于 2012-04-22T11:48:18.607 回答