Array 类型
Array 类型是除 Object 外 ECMAScript 中最常用的类型。
ECMAScript 中的数组与其他语言中的数组有很大的区别:
- ECMAScript 中数组的每一项可以保存任何类型的数据。也就是说,数组中可以第一位用来保存字符串,而第二位用来保存数值。
- ECMAScript 中数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
创建数组
创建数组的基本方式有两种:
1. Array 构造函数
具体看代码:
var colors1 = new Array();
// 也可以创建指定长度的数组(值为 undefined)
var colors2 = new Array(10);
alert(colors2[0]); // undefined
alert(colors2.length); // 10
// 也可以向 Array 构造函数传递数组中应该包含的项
var colors3 = new Array("red", "blue", "green");
alert(colors3) // red,blue,green
alert(colors3.length) // 3
// 在使用 Array 构造函数时也可以省略 new 操作符
// 与不省略 new 操作符相同
var colors4 = Array();
2. 数组字面量表示法
数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开。
// 创建包含 3 个字符串的数组
var colors1 = ["red", "blue", "green"];
// 创建一个空数组
var colors2 = [];
// 不要这样!这样会创建一个包含 2 或 3 项的数组(浏览器差异)
var value = [1,2,];
操作数组值
在读取和设置数组的值时,使用方括号并提供相应值的基于 0 的数字索引。
需要注意的几点:
- 如果设置某个值的索引超过了数组现有项数,会自动增加到该索引值加 1 的长度。
- 数组的 length 属性不是只读的。因此可以通过设置这个属性,从数组的末尾移除项或添加项。
- 如果将 length 属性设置为大于数组项数的值,新增的每一项都会取 undefined 值。
- 通过 length 可以方便的向数组末尾添加新项:
var colors = ["red", "blue"]; colors[colors.length] = "green";
检测数组
当我们检测数据类型时,可能首先想到的是 typeof 和 instanceof。对于一个网页或者一个全局作用域来说,使用 instanceof 操作符可以用来检测数组类型。但是 instanceof 的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架则 instanceof 就无法使用了。
我们可以通过 Array.isArray( ) 方法,这个方法的目的是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建。
用法:
if (Array.isArray(value)) {
// TODO
}
转换方法
所有的对象都有 toLocaleString( ) 、toString( ) 和 valueOf( ) 方法。
调用数组的 toString( ) 方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串(为了创建这个字符串会调用数组每一项的 toString( ) 方法)。而调用 valueOf ( ) 返回的还是数组。
var colors = new Array("red", "blue", "green");
alert(colors.toString()) // red,blue,green
alert(colors.valueOf()) // red,blue,green
var c1 = colors.toString()
var c2 = colors.valueOf()
alert(typeof(c1)) // string
alert(typeof(c2)) // Object
alert(Array.isArray(c2)) // true
另外:
数组继承的 toLocaleString( ) 、toString( ) 和 valueOf( ) 方法,在默认情况下都会以逗号分隔。使用 join( ) 方法可以用不同的分隔符来创建这个字符串。 join( ) 方法只接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串。
alert(colors.join("||")) // red||blue||green