JavaScript数组

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出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值