ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过 new 操作符后跟要新建的对象类型名称来创建。 而创建 Object 类型的实例并为其添加属性和方法,就可以创建自定义对象,例如:
var o = new Object();
在 ECMAScript 中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号(不推荐):
var o = new Object;
这里需要理解一个重要思想,即在 ECMAScript 中,Object类型是所有其他实例的基础。换句话说,Object类型所具有的属性和方法也同样存在于其他对象中:
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是 Object()。
- hasOwnProperty(propertyName):检查给定的属性在当前对象实例中是否存在(不是在实例的原型中)。propertyName必须以字符串形式指定。
- isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for - in 语句枚举。
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString() 方法的返回值相同。
注:从技术角度讲,ECMA - 262 中对象的行为不一定适用于Javascript 中的其他对象。浏览器环境中的对象,比如BOM和DOM中的对象,都属于宿主对象,因为它们是由宿主实现提供和定义的。ECMA - 262 不负责定义宿主对象,因此宿主对象可能会也可能不会继承 Object。
到目前为止,我们看到的大多数引用类型值都是 Object 类型的实例。创建 Object 实例的方式有两种。第一种是使用 new 操作符后跟 Object 构造函数,如下所示:
var person = new Object();
person.name = "Xqlun";
person.age = 29;
另一种方式是使用 对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程,如:
var person = {
name: "Xqlun",
age: 29
};
在使用对象字面量语法时,属性名也可以使用字符串,如:
var person = {
"name": "Xqlun",
"age": 29,
5: true
};
这个例子会创建一个对象,包含三个属性:name、age和5。但这里的数值属性名会自动转换为字符串。
另外,使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象,如:
var person = {}; // 与 new Object() 相同
一般来说,访问对象属性时使用的都是点表示法,这也是很多面向对象语言中通用的语法。不过,在Javascript 中也可以使用方括号表示法来访问对象属性。在使用方括号表示语法时,应该将要访问的属性以字符串的形式放在方括号中,如下所示:
alert(person["name"]); // "Xqlun"
alert(person.name); // "Xqlun"
从功能上看,这两种访问对象属性的方法没有任何区别。但方括号语法的主要优点是可以通过变量来访问属性,例如:
var propertyName = "name";
alert(person[propertyName]); // "Xqlun"
如果属性名中包含导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法,例如:
person["first name"] = "Xu";
由于“first name” 中包含一个空格,所以不能使用点表示法来访问它。然而,属性名中是可以包含非字母非数字的,这时候就可以使用方括号表示法来访问它们。