第八章 8.1 对象和属性(Objects and Properties)
object 是一些值的集合。他允许我们通过一个关联的名称来取出值。简而言之,就是一些 key / value 的组合。其中的 value 可以是原始 (primitive) 数据类型(number, string), 也可以是 object。
如何创建 object
object 可以通过 new 操作符来创建。后面跟一个构造函数名(constructor),这个 constructor 用来进行初始化。例如:
var o = new Object(); // 创建一个空对象(没有任何属性的)。
也可以利用内建的一些 constructor 函数来创建一些对象。比如:
var now = new Date( ); // The current date and time
var new_years_eve = new Date(2000, 11, 31); // Represents December 31, 2000
var new_years_eve = new Date(2000, 11, 31); // Represents December 31, 2000
还有一种创建对象的方式叫做“object 字面值”(object literals),其语法如下:
var circle = { x:0, y:0, radius:2 }
var homer = {
name: "Homer Simpson",
age: 34,
married: true,
occupation: "plant operator",
email: "homer@simpsons.com"
};
var homer = {
name: "Homer Simpson",
age: 34,
married: true,
occupation: "plant operator",
email: "homer@simpsons.com"
};
这种语法是在 ECMAScript v3 中定义的。JavaScript 1.2 以及更高版本都实现了。
存取 Object 里的值,使用 “.” 操作符即可。一些例子:
// Create an object. Store a reference to it in a variable.
var book = new Object( );
// Set a property in the object.
book.title = "JavaScript: The Definitive Guide"
// Set some more properties. Note the nested objects.
book.chapter1 = new Object( );
book.chapter1.title = "Introduction to JavaScript";
book.chapter1.pages = 19;
book.chapter2 = { title: "Lexical Structure", pages: 6 };
// Read some property values from the object.
alert("Outline: " + book.title + "\n\t" +
"Chapter 1 " + book.chapter1.title + "\n\t" +
"Chapter 2 " + book.chapter2.title);
var book = new Object( );
// Set a property in the object.
book.title = "JavaScript: The Definitive Guide"
// Set some more properties. Note the nested objects.
book.chapter1 = new Object( );
book.chapter1.title = "Introduction to JavaScript";
book.chapter1.pages = 19;
book.chapter2 = { title: "Lexical Structure", pages: 6 };
// Read some property values from the object.
alert("Outline: " + book.title + "\n\t" +
"Chapter 1 " + book.chapter1.title + "\n\t" +
"Chapter 2 " + book.chapter2.title);
枚举对象的属性
用 for...in 语法,例子如下:
function DisplayPropertyNames(obj) {
var names = "";
for(var name in obj) names += name + "\n";
alert(names);
}
var names = "";
for(var name in obj) names += name + "\n";
alert(names);
}
这个语法仅仅列举用户定义的那些属性,而不列举预定义的那些。列举属性是不按任何固定次序的。
undifined
如果要取出一个不存在的属性,则会得到 undefined.
要删除一个已有的属性,用 delete 操作符。语法如下:
delete book.chapter2;
这个操作不是仅仅把该属性设成 undefined. 而是从对象中彻底除去。用 for...in 循环可以测试出这一点。for...in 语法会列出值为 undefined 的那些属性。