原文:从头开始学JavaScript (十一)——Object类型
一、object类型
一个object就是一系列属性的集合,一个属性包含一个名字(属性名)和一个值(属性值)。
object对于在应用程序中存储和传输数据而言,是非常理想的选择
二、创建object
创建object实例有两种方法:
- 使用new 操作符后跟object构造函数
- 使用对象初始化器,也就是对象字面量表示法
2.1使用new 操作符后跟object构造函数创建object实例:
var person = new Object();
person.name = "Nicholas";
person.age = 29;
和其他 javascript 变量一样,对象的名字(可以是普通的变量)和属性的名字都是大小写敏感的。
2.2使用对象字面量表示法创建object实例:
var person = {
name : "Nicholas",
age : 29
};
每个属性用”,“隔开,最后一个属性不能加”,“否则在某些浏览器中会报错。
2.2.1在使用字面量表示法时,属性名也可以用字符串表示:
var person = {
"name" : "Nicholas",
"age" : 29,
5:true
};
这个例子包含3个属性:name、age、5,这里的数值属性名会自动转化成字符串。
2.2.2在使用对象字面量表示法时,如果留空{},则可以定义只包含默认属性和方法的对象:
var person = {};
person.name = "Nicholas";
person.age = 29;
向函数传递大量可选参数时,建议使用字面量表示法:
function displayInfo(args) {
var 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"
});
首先使用typeof操作符检测每个属性是否存在,然后再针对这个属性执行操作。
三、object属性表示法
- 点表示法
- []表示法
3.1点表示法
var person = {
"name" : "Nicholas",
"age" : 29
}; alert(person.name);
alert(person.age);
最后两行就是用点表示法获取object属性的。
3.2[]表示法
如下:
var myCar = new Object();
myCar.make = "Ford";
myCar.model = "Mustang";
myCar.year = 1969;
alert(myCar["make"]+myCar["model"]+myCar["year"]);
最后一行就是用[]表示法来获取object属性的。
因为每个属性都有一个用于访问它的字符串值(也就是键:值对中的键),所以对象有时也被叫作关联数组。
- 可以通过变量来访问属性
var pName="name";
alert(cat[pName]);
- 如果属性名中包含会导致语法错误的字符(例如,一个有空格或短横线,或者以数字开头的属性名),或者属性名使用的是关键字或保留字,也可以用方括号表示法。
cat["lovely brother"]="Tom"; 属性名中包含空格所以不能使用点表示法访问它。
- 在属性名称是动态判定(属性名只有到运行时才能判定)时非常有用,详见下文中的for...in循环
四、枚举一个对象的所有属性
- for...in 循环
- Object.keys(o)
- Object.getOwnPropertyNames(o)
4.1for...in 循环
该方法依次访问一个对象的自身属性及其原型链中所有可枚举的属性。
var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
prop是属性名。obj[prop]是用[]的方法获取对象的属性值。
4.2Object.keys(o)
该方法返回一个对象自身包含(不包括原型中)的所有属性的名称的数组,该数组所有值均为字符串。
var obj={"No1":"a","No2":"b"}
alert(Object.keys(obj));
4.3Object.getOwnPropertyNames(o)
该方法返回一个数组,它包含了对象 o
所有拥有的属性(无论是否可枚举)的名称。
(未完待续。。。)