对象是一种复合数据类型,它们将多个数据值集中在一个单元中,而且允许使用名字来存取这些值.
一.创建对象
1.在javascript代码中加入一个对象直接量.
如:
var empty = {};
var point = { x:0, y:0};
var john = {"name":"Jonh Doe", "age": 24};
2.new运算符可以创建具体的一类对象。
如:
var a = new Array();
var r = new RegExp("javascript","i");
Object()构造函数创建一个空的对象,就像直接量{}所作的一样
二.对象属性
使用"."运算符.
如:
book.title = "JavaScript: The Rhino Book"
1.属性的枚举
使用for/in循环提供枚举对象属性的方法.
2.检查属性的存在性
使用in运算符,左边是属性的名字(字符串形式),右边是要被测试的对象.
注意,一个属性也可能已经存在但还是未定义的,此时,需要===运算符判断未定义的值undefined.
(因为 == 运算符认为 undefined 值等价于 null)
3.删除属性
可以使用delete运算符来删除一个对象的属性。
注意,删除属性并不仅仅是把属性设为undefined,它实际上从对象移除了属性。在删除之后,in运算符也不会检测到该属性。
三.作为关联数组的对象
数组常用的存取属性运算符是[].
如下两个表达式值相等:
object.property
object["property"]
这两条语法之间的区别是,前者的属性名是标识符,后者的属性名却是一个字符串。
这样的好处是 可以在程序运行的过程中操作并创建它们。
由于事先无法知晓这个属性名,所以在编写程序时不能用"."来存取属性,但是可以使用[]来命名属性,因为它的属性名是一个字符串值(该值是动态的,可以在运行时改变),而不是一个标识符(它是静态的,在程序中必须对其硬编码)。
这样的对象称为关联数组。
四.通用的Object属性和方法
1.constructor属性
在javascript中,每个对象都有一个constructor属性,它引用了初始化这个对象的构造函数。例如,使用Date()创建了一个对象d,属性d.constructor的引用Date。
instanceof运算符检查constructor属性值,如 o instanceof Date 等价于 o.constructor == Date。
2.toString()方法
toString()方法没有参数,它返回一个某种程度上代表着对象的值的一个字符串,而它正是在这个对象上调用的。当javascript需要把一个对象转换为一个字符串的时候,就会调用这个方法。
由于默认的toString方法并不能显示太多有用的信息,很多类都定义了自己的toString()方法。
3.toLocaleString()方法
作用是返回对象的一个本地化字符串表示。Object所定义的默认的toLocaleString()方法并不会本地化自己,总是返回和toString()完全相同的内容。然而,子类可以定义它们自己的toLocaleString()版本。
4.valueOf()方法
它是当javascript需要把一个对象转换为某种基本数据类型,也就是一个数字而不是字符串的时候,才调用的方法。
5.hasOwnProperty()方法
如果对象用一个单独的字符串参数所指定的名字来本地定义一个非继承的属性,hasOwnProperty()返回true,否则false。
6.propertyIsEnumerable()方法
如果对象用一个单独的字符串参数所指定的名字来定义一个非继承的属性,并且如果这个属性可以在一个for/in循环中枚举,propertyIsEnumerable()方法就返回true,否则false。
注意,一个对象的所有的用户定义的属性都是可以枚举的。不能枚举的属性通常都是继承的属性,因此,这个方法几乎总是会和hasOwnProperty()返回相同的结果.
7.isPrototypeOf()方法
如果isPrototypeOf()所属的对象是参数的原型对象,那么该方法返回true,否则false。