目录
Object是ECMAScript中最常用的类型之一。虽然Object的实例没有多少功能,但很适合存储和应用程序间交换数据。显式地创建Object的实例有两种方式,第一种是new操作符和Object构造函数:
let person = new Object();
person.name = "Nicholas";
person.age = 29;
另一种方式是使用对象字面量表示法,对象字面量是对象定义的简写形式,目的是为了简化包含大量属性的对象的创建:
let person = {
name:"Nicholas",
age:29;
};
逗号用于在对象字面量中分隔属性,因此字符串“Nicholas”后面有一个逗号,在对象字面量表示法中属性名可以是字符串或数值:
let person = {
"name":"Nicholas",
"age":29,
5:true
};
这个例子会得到一个带有属性name,age和5的对象,注意数值属性会自动转换为字符串。当然也可以用对象字面量表示法来定义一个只有默认属性和方法的对象:
let person = {};
person.name = "Nicholas";
person.age = 29;
事实上,对象字面量已经成为给函数传递大量可选参数的主要方式:
function displayInfo(args){
let output = "";
if (typeof args.name == "string"){
output+="Name: "+args.name+"\n";
}
if (typeof args.age == "number"){
output+="Age: "+args.age+"\n";
}
alert(output);
}
displayInfo({
name:"Nicholas",
age:29
});
displayInfo({
name:"Greg"
})
这里函数displayInfo()接收一个名为args的参数。这个参数可能有属性name或age,也可能这两个属性都有或者都没有。函数内部或使用typeof操作符测试每个属性是否存在,然后根据属性有无构造并显示一条消息。然后这个函数被调用了两次,每次都通过一个对象字面量传入了不同的数据。两种情况下函数都可以运行。
虽然属性一般是通过点语法来存取的,但也可以使用中括号来存取属性。在使用中括号时,要在括号内使用属性名字符串形式,比如:
console.log(person["name"]);
console.log(person.name);
从功能上讲,这两种存取属性的方式没有区别,使用中括号的主要优势就是可以通过变量访问属性:
let propertyName = "name"
console.log(person[propertyName]);
另外,如果属性名中包含可能会导致语法错误的字符,或者包含关键字/保留字时,也可以使用中括号语法:
person["first name"] = "Nicholas";
因为"first name"中包含一个空格,所以不能使用点语法来访问。不过属性名中是可以包含非字母数字字符的,这时候只要用中括号语法存取它们就行了。