1. 数组的定义
var arr = ['a', 'b', 'c'];
任何类型的数据,都可以放入数组。
var arr = [
100,
[1, 2, 3],
false
];
数组本质上属于一种特殊的对象。
var arr = ['a', 'b', 'c'];
console.log(typeof arr); // object
2. 数组的length属性
该属性可以通过赋值运算符重新赋值。
① 当给数组的length赋值一个更小的值时,会相应地减少数组的成员数。
var arr = ['a', 'b', 'c'];
console.log(arr.length); // 3
arr.length = 2;
console.log(arr); // ['a', 'b']
可利用上述特性清空一个数组。
arr.length = 0;
② 当给数组的length赋值一个更大的值时,会在原数组增加相应数量的空成员。
var arr = ['a', 'b', 'c'];
console.log(arr.length); // 3
arr.length = 5;
console.log(arr); // ['a', 'b', 'c', empty × 2]
3. 数组的遍历
① 可用基础的for、while和do...while循环遍历数组。
② for...in遍历数组
var a = [1, 2, 3];
for (var i in a) {
console.log(a[i]); // 1 2 3
}
4. 数组的方法
4.1 构造函数
var arr = new Array(2);
console.log(arr.length); // 2
console.log(arr); // [empty × 2]
console.log(typeof arr); // object
4.2 Array.isArray()
Array.isArray方法返回一个布尔值,表示参数是否为数组。它可以弥补typeof运算符的不足。
var arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true;
4.3 valueOf()
valueOf方法是一个所有对象都拥有的方法,表示对该对象求值。不同对象的valueOf方法不尽一致,数组的valueOf方法返回数组本身。
var arr = [1, 2, 3];
console.log(arr.valueOf()); // [1, 2, 3]
4.4 toString()
toString方法也是对象的通用方法,数组的toString方法返回数组的字符串形式。
var arr = [1, 2, 3];
arr.toString(); // "1,2,3"
var arr = [1, 2, 3, [4, 5, 6]];
arr.toString(); // "1,2,3,4,5,6"
4.5 push()和pop()
push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
pop方法用于删除数组的最后一个元素,并返回该元素。注意,该方法会改变原数组。
var arr = ["first"];
arr.push("a");
arr.push("b","c"); // push可以接收多个参数
console.log(arr); // ['first', 'a', 'b', 'c']
arr.pop();
console.log(arr); // ['first', 'a', 'b']
4.6 shift()和unshift()
shift方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。
unshift方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
var arr = ["first"];
arr.unshift("a");
arr.unshift("b","c"); // unshift可以接收多个参数,注意移入的顺序
console.log(arr); // ['b', 'c', 'a', 'first']
arr.shift();
console.log(arr); // ['c', 'a', 'first']
4.7 join()
join方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。
var arr = [1, 2, 3];
console.log(arr.join("")); // 123
console.log(arr.join(",")); // 1,2,3
console.log(arr.join("|")); // 1|2|3
4.8 concat()
concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。
除了数组作为参数,concat也接受其他类型的值作为参数,添加到目标数组尾部。
['hello'].concat(['world']);
// ["hello", "world"]
[1, 2, 3].concat(4, true, "mystring");
// [1, 2, 3, 4, true, 'mystring']
4.9 reverse()
reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组。
var arr = [1, 2, 3];
arr.reverse();
console.log(arr); // [3, 2, 1]
4.10 slice()
slice方法用于提取目标数组的一部分,返回一个新数组,原数组不变。
它的第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。
var arr = [1,2,3];
// 两个参数的slice()
console.log(arr.slice(0,2)); // [1,2]
console.log(arr); // [1,2,3],可见不会修改原数组
// 一个参数的slice(),第二个参数默认为数组结尾
console.log(arr.slice(1)); // [2,3]
4.11 splice()
splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
splice的第一个参数是删除的起始位置(从0开始),第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(a.splice(4, 2)); // ['e', 'f'],返回被删除的成员
console.log(a); // ['a', 'b', 'c', 'd']
console.log(a.splice(2, 2, 1, 2)); // ["c", "d"]
console.log(a); // ['a', 'b', 1, 2]
4.12 sort()
sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。
sort方法不是按照大小排序,而是按照字典顺序。也就是说,数值会被先转成字符串,再按照字典顺序进行比较,所以101排在11的前面。
['d', 'c', 'b', 'a'].sort()
// ['a', 'b', 'c', 'd']
[4, 3, 2, 1].sort()
// [1, 2, 3, 4]
[11, 101].sort()
// [101, 11]
[10111, 1101, 111].sort()
// [10111, 1101, 111]
4.13 indexOf()
indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
indexOf方法还可以接受第二个参数,表示搜索的开始位置。
var arr = [1,2,1,2,3,1];
// 一个参数的indexOf()
console.log(arr.indexOf(1)); // 0,第一个1出现的位置
console.log(arr.indexOf(4)); // -1,没有4出现
//两个参数的indexOf(),第二个参数表示匹配的开始位置
console.log(arr.indexOf(2,4)); // -1,第四个位置开始往后没有2出现