Array类型是js中常用的引用类型。js中的Array最大的特点就是:数组可以容纳多种类型的元素,数组在定义的时候不用指明元素类型,一个数组中可以混杂多种数据类型。
创建数组
// 使用Array对象初始化
// 需要预先知道元素数量
var colors = new Array(10);
// 传入数字,则使用数字个数初始化数组
// 传入其他数据类型,则创建只有一个元素的数组
var colors = new Array('red');
// 使用多个元素初始化Array
var colors = new Array('red', 'blue', 'green');
// 省略new
var colors = Array(34);
// 使用字面量
var colors = ['red'];
// 创建空数组
var colors = [];
// 使用下面的写法在不同的浏览器中运行结果不同,不要使用
var colors = ['red'];
var colors = [, ,];
使用数组
数组可以自动扩充,当设置了数组之外的索引的值的时候,数组被自动扩充到需要的大小
var colors = new Array('red', 'blue', 'green');
console.log(colors.length); // 3
console.log(colors[5]); // 输出undefined
console.log(colors.length); // 3
colors[5] = '6';
console.log(colors.length); // 6
数组的length不是只读的,所以可以用于删除项或者新增项,新增的项都是undefined,数组的这个特性还有个很巧妙的用法就是用来添加新的项
// 裁切数组
var colors = new Array('red', 'blue', 'green');
colors.length = 2;
console.log(colors[2]); // undefined
// 在数组后追加一项
colors[colors.length] = 'new';
colors[colors.length] = 'new2'; // 再新增一项
检测对象是不是数组
当我们检测一个对象是不是数组的时候很容易想到使用 instanceof 来判断。我们复习一下 instanceof 是判断一个对象的原型的,我们通过判断对象是不是继承自Array就可以判断出来。
但是,这只是理论上可行,由于网页的运行环境复杂,很容易就包含多个框架,而多个框架就有可能有多个Array的构造函数,如果两个框架之间传递参数,就有可能判断有误,认为这个对象并不是继承自自己框架内的Array,导致判断失误。
正确的做法是使用ES5提供的Array.isArray方法
var colors = new Array('red', 'blue', 'green');
console.log(Array.isArray(colors)); // true
console.log(Array.isArray('123')); // false
数组的输出
数组默认tostring是以逗号分隔输出的。
var colors = new Array('red