1.创建对象
创建对象最简单的方法是在js代码中包含进字面意义上的对象(object literal)。一个object literal是一个用逗号隔开的name/value对。用大括号包含。属性名可以为js标识符( identifier)或字符串,属性值可以为常量或任意js表达式。例如:
var empty = {}; // An object with no properties
var point = {x:0, y:0};
var circle = {x:point.x, y:point.y+1, radius:2};
var homer = {
"name": "Homer Simpson",
"age": 34,
"married": true,
"occupation": "plant operator",
'email': [email protected]
};
object literal 是一个每次evaluate时创建并初始化一个新的与众不同的对象的表达式。That is, a single object literal can create many new objects if it appears within the body of a loop in a function that is called repeatedly.
new操作符可以创建特定类型的对象。
2.对象属性
对象属性如同变量一样工作。如
<code>
//创建对象,将其reference存在一个变量中
var book = {};
//设置对象的一个属性
book.title = "JavaScript: The Definitive Guide"
// 设置更多的属性,注意嵌套对象
book.chapter1 = new Object();
book.chapter1.title = "Introduction to JavaScript";
book.chapter1.pages = 11;
book.chapter2 = { title: "Lexical Structure", pages: 6 };
// 读取对象的值.
alert("Outline: " + book.title + "\n\t" + "Chapter 1 " + book.chapter1.title + "\n\t" + "Chapter 2 " + book.chapter2.title);
</code>
注意如上所示:可以为对象创建一个新的属性只需要简单地给它赋一个值。甚至都不需要使用var关键字。且这个属性的值可以任意改变。
2.1 列举属性(Enumerating Properties)
for/in 循环提供了在对象属性中循环的方法。在调试脚本或者预先不知道所用对象的属性名时很有用。下面的例子是列出一个对象的所有属性名:
<code>
function DisplayPropertyNames(obj) {
var names = " ";
for(var name in obj) names += name + "\n";
alert(names);
}
</code>
注意for/in 循环不以特定属性枚举属性,尽管枚举所有用户自定义属性但不枚举特定的预定义属性和方法。
2.2 检查属性是否存在
用操作符in
<code>
if("x" in o) o.x = 1;
in不常用,因为如果所求的属性不存在,会返回undefined值,故上式通常写为:
if( o.x!== undefined) o.x = 1;
2.3 删除属性
delete book.chaper2;
</code>
并不只是将属性设为undefined,而是将此属性从对象中移除,此操作之后,for/in 将不再枚举这个属性,in操作符也不能检测到这个属性。