前言
前面在第三章基本概念一节稍微提及了引用类型的概念,在第四章详细介绍了基本数据类型与引用类型作为变量时的不同。本章将详细介绍ECMAScript的原生引用类型。
首先复习下基本类型值与引用类型值的特点:
- 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中
- 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
- 引用类型的值是对象,保存在堆内存中;
- 包含引用类型值的变量确实是在栈内存中,不过它仅仅是一个指向对象的指针而已
- 从一个变量向另一个变量复制引用类型的值,复制的是指针,因此两个变量最终指向同一个对象
- 确定一个值是哪种基本类型可以用 typeof 操作符,而确定一个值是哪种引用类型可以使用 instanceof 操作符
引用类型的值(即
对象)是某个特定引用类型的一个
实例。
引用类型有时也被成为
对象定义,因为它们描述的是一类对象所具有的属性和方法。
5.1 Object类型
创建Object实例的方式:
- 使用new 操作符后面跟 Object构造函数:
var person = new Object(); //person是一个对象,即Object类型的实例
person.name = "Jack"; //name是person的属性
person.age = 26;
- 使用对象字面量表示法(注意标点)
var person = {
name : "Jack", //此处是逗号
age : 26 //最后一个属性后面没有符号
}; //定义完需要引号结尾
☞对象字面量法要求的代码量少,而且能给人封装数据的感觉。实际上,对象字面量也是向函数传递大量可选参数的首选方式。
访问对象属性的方式:
- 点表示法
- 方括号表示法
alert(
person.name); //点表示法
alert(
person["name"]); //方括号法
var propertyName = "name"; //把属性"name"赋值给一个变量
alert(person[propertyName]); //方括号法还可以通过此变量来访问属性
//当属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号法
person["first name"] = "Jack"; //此例中,"first name"中有空格,不能用点表示法来访问 person.first name 是错误的
注:除非必须使用变量来访问属性,否则建议使用点表示法。
5.2 Array 类型
特点:
- 和其他语言的数组一样,都是数据的有序列表
- 不同的是,ECMAScript数组的每一项可以保存任何类型的数据。(解释:第一项是String,第二项可以是Number,第三项又可以是对象。。。。)
- ECMAScript数组的大小可以动态调整,即随着数据的添加自动增长以容纳新增数据。
创建方法:
- 使用Array构造函数
-
- 空数组 var Obj = new Array();
- 指定长度的数组 var Obj = new Array(size);
- 指定元素的数组 var Obj = new Array( element0, element1, ..., elementn)
- 使用数组字面量表示法
- 单维数组 var Obj = [ element0, element1, ..., elementn];
- 多维数组 var Obj = [[数组序列1], [数组序列2], ....... , [数组序列n]];
基本操作:
数组属性:
- constructor : 引用数组对象的构造函数
- length : 返回数值的长度(具体看P87)
- property : 通过增加属性和方法扩展数组的定义
数组方法: