1. 引用类型

引用类型是一种数据结构,也被称为对象定义,一组数据与功能的集合,描述的是一类对象所具有的属性和方法

  • 引用类型的值,是保存在内存中的对象

  • javascript 不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间

  • 在操作对象时,实际上操作的是对象的引用。

  • 当复制保存对象中的某个变量时,操作的是对象的引用,但在为对象添加属性或方法时,操作的是实际的对象

当从一个变量向另一个变量复制引用类型值时,复制的是这个对象的指针,指向存储在内存中的对象。复制结束后,两个变量实际上将引用同一对象,相互影响。

  1. var obj1 = new Object();
  2. var obj2 = obj1;
  3. obj1.name = "Nicholas";
  4. alert(obj2.name); // "Nicholas"

2. 创建方法

第一种,使用 new 操作符加上对象类型名称相应的构造函数创建

  1. var person = new Object();
  2. person.name = "Nicholas";
  3. person.age = 29;

如果不给构造函数传递参数,可以省略后面的一对圆括号,但是不推荐

第二种,使用对象字面量表示法

  1. var person = {
  2. name: "Nicholas",
  3. age: 29
  4. }

这里的属性名也可以用字符串的形式

注意属性之间以逗号隔开,最后一个属性后不添加逗号,否则会出现语法错误。

对象字面量也是向函数传递大量可选参数的首选方式

  1. function displayInfo(args) {
  2. var output = "";
  3. if (typeof args.name == "string") {
  4. output += "Name: " + args.name +"\n";
  5. }
  6. if (typeof args.age == "number") {
  7. output += "Age: " + args.age + "\n";
  8. }
  9. alert(output);
  10. }
  11. displayInfo({
  12. name: "Nicholas",
  13. age: 29
  14. });
  15. displayInfo({
  16. name: "Greg"
  17. });

最好的做法是,对那些必需值使用命名参数,使用对象字面量来封装多个可选参数

3. 访问对象属性和方法

点表示法

alert(person.name);

方括号表示法

alert(person["name"]);

主要优点是,可以通过变量来访问属性

var propertyName = "name";
alert(person[propertyName]);

如果属性中包含会导致语法错误,或者关键字、保留字等,可以使用方括号表示法

除非必须使用变量来访问属性,否则建议使用点表示法

4. Object 实例默认属性和方法

4.1 constructor

保存着用于创建当前对象的函数,即构造函数

o.constructor = object;

4.2 hasOwnProperty()

用于检查给定属性在当前对象实例中是否存在(不包含实例的原型)。

o.hasOwnProperty("propertyName");

propertyName 参数必须以字符串的形式指定

4.3 isPrototypeOf()

用于检查传入对象是否是对象的原型

4.4 propertyIsEnumerale()

用于检查给定的属性是否能够使用 for-in 来枚举

4.5 toLocaleString()

返回对象的字符串表示,该字符串与执行环境的地区对应

4.6 toString()

返回对象的字符串表示

4.7 valueOf()

返回对象的字符串、数值或布尔值表示。通常与 toString() 方法的返回值相同