可能重复:
JavaScript 属性访问:点符号与括号?
我现在正在阅读一些开源 javascript 项目代码,我看到有时他们访问对象属性,person.name
但有时他们访问person['name']
。
对我来说,点符号相对于其他符号非常清楚。点表示法易于编写和阅读,但在源代码中我看到它们有时使用点表示法,有时 [] 大括号表示法,我试图理解它的原因是什么。
这可能是什么原因?
可能重复:
JavaScript 属性访问:点符号与括号?
我现在正在阅读一些开源 javascript 项目代码,我看到有时他们访问对象属性,person.name
但有时他们访问person['name']
。
对我来说,点符号相对于其他符号非常清楚。点表示法易于编写和阅读,但在源代码中我看到它们有时使用点表示法,有时 [] 大括号表示法,我试图理解它的原因是什么。
这可能是什么原因?
首先它可以是动态的字符串:
var key = 'name';
person[key];
其次,它还支持其他不支持的符号
var key = 'first-name';
person[key];
这是一个用例(具有不可能的属性名称)
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
这是使用方括号的一个很好的理由,我们将属性名称作为参数传递:
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';
在方法中使用这种表示法非常有用,例如,您将属性名称作为参数发送。
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');