第05章:引用类型
引用类型的值(对象)是引用类型的一个实例。在 ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起。
引用类型常被称为“类”,但 ECMAScript 中,引用类型不具备传统面向对象语言所支持的类和接口等基本结构,所以“类”和引用类型不是相同的概念,在 ECMAScript 中,没有真正的“类”的概念。
引用类型又称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
对象是某个特定引用类型的实例,新对象是使用 new 操作符后跟一个构造函数来创建的;构造函数本身就是一个函数,但它是用于创建新对象的目的而定义的,它只为新对象定义了默认的属性和方法。
ECMAScript 提供了很多用来实现常见计算任务的原生引用类型。
5.1. Object 类型
大多数引用类型都是 Object 类型的实例。创建 Object 实例的方式有两种:一种是使用 new 操作符后跟 Object 构造函数;另一种是使用对象字面量表示法,即直接使用一对花括号表示一个对象。例如:
var person = { name: 'lucy', age: 16 };
上面的例子中,左花括号表示对象字面量开始,因为它出现在了表达式上下文(expression context)中。ECMAScript 中的表达式上下文指的是该上下文期待一个值(表达式)。
赋值操作符表示后面是一个值,所以左花括号在这里表示一个表达式开始;而左花括号如果出现在一个语句上下文(statement context)中,例如 if 条件语句后面,则表示一个语句块的开始。
属性名后面跟冒号,然后是属性值;属性之间使用逗号分隔,最后一个属性值后面不要加逗号;属性名也可以使用字符串。
虽然与使用 new 操作符的方式等价,但实际上使用对象字面量定义对象时,不会调用 Object 构造函数。
使用对象字面量的方式给函数传递参数适合需要向函数传入大量可选参数的情形;一般推荐函数必须值使用命名参数,而使用对象字面量来封装多个可选参数。
访问对象属性都是点表示法,但在 JavaScript 中也可以使用方括号表示法来访问对象属性,这种方式属性名必须以字符串形式放在方括号中。如果属性名中包含会导致语法错误的字符,就使用方括号来访问该属性;一般都用点表示法。
5.2. Array 类型
数组是数据的有序列表,在 ECMAScript 中数组都是 Array 类型的实例,数组的每一项都可以保存任何类型的数据,相比其他语言的数组,这点很特殊。
创建数组的基本方式也有两种:第一种是使用 new 操作符,后跟 Array 构造函数,构造函数的参数设置数组的长度(length)或包含的数据项。例如:
var names = new Array(10); //创建了一个长度为10的数组; var colors = Array('red'); //不使用new操作符也可以,创建了一个长度为1,并且数据为字符串"red"的数组;
另一种基本方式是使用数组字面量表示法,数组字面量由一对包含数组项的方括号表示,多个数组项之间使用逗号分隔。
在读取和设置数组的值时,要使用方括号并提供相应值的基于 0 的数字索引(数组下标)。在设置数组的值时,如果索引小于数组长度,则会替换对应索引的值;如果索引大于数组长度,则数组长度会加长到此索引加 1 的长度。
数组的项数(长度)保存在其 length 属性中,它不是只读的,可以通过设置这个属性,来变更数组的长度;用这种方法可以删除、添加数组项或将数组清零。
被延长长度方法添加的数组项,由于没有数值,所以访问时会返回 undefined 值。
利用 length 属性也可以方便的在数组末尾添加新项,这是需要掌握的技巧,例如:
var arr = [1, 2, 3, 4]; arr[arr.length] = 5; arr[arr.length] = 6; alert(arr);
aa
a