五、数组
数组是JS中的一个数据容器。它是引用类型之一。
它的作用非常简单,就是用来装多个数据。
5.1 定义数组
- 字面量
- 构造函数
字面量语法:
var arr = [成员1, 成员2, 成员3, ...];
构造函数语法:
var arr = new Array(成员1, 成员2, 成员3, ...)
小bug:当参数只有一个且参数的类型是数字时 会被当做数组的长度(也是定义一个数组长度)
5.2 数组的使用
数组是由 成员+下标组成的

假设已有数组: [‘张三’, ‘李四’, ‘王五’, ‘赵六’]
获取成员’张三’
var arr = ['张三', '李四', '王五', '赵六']console.log(arr[0])
添加成员/修改成员
// 构造函数定义一个数组var arr = new Array('张三', '李四', '王五', '赵六')// 添加成员arr[4] = '龚七'console.log(arr)// 修改成员arr[2] = '王老五'console.log(arr)
5.3 数组的属性length
数组有一个属性 length 表示数组有多少个成员
这个属性可读可写
var arr = [];console.log(arr.length) // 读取length属性arr.length = 10; // 设置length属性console.log(arr.length)
PS: length属性虽然可读可写但是我们一般只读
5.4 数组的方法
5.4.1 unshift
作用:头部增加
返回值:数组的新长度
var arr = ['张三', '李四', '王五', '赵六'];arr.unshift('王二')console.log(arr);// ["王二", "张三", "李四", "王五", "赵六"]
5.4.2 shift
作用:删除数组的头部第一项
返回值:被删除的那一项
var arr = ['张三', '李四', '王五', '赵六'];var result = arr.shift()console.log(result); // 张三console.log(arr) // ['李四', '王五', '赵六'];
5.4.3 push
作用:尾部增加
返回值:数组的新长度
var arr = ['张三', '李四', '王五', '赵六'];var result = arr.push('王二')console.log(result); // 5console.log(arr); // ["张三", "李四", "王五", "赵六", "王二"]
5.4.4 pop
作用:尾部删除
返回值:被删除的那一项
var arr = ['张三', '李四', '王五', '赵六'];var result = arr.pop();console.log(result); // 赵六console.log(arr) // ["张三", "李四", "王五"
5.4.5 concat
作用:合并
参数:任意个、任意类型
返回值:一个新的合并后的数组
特点:不改变原来的数组
var arr = ['张三', '李四', '王五', '赵六'];var arr1 = arr.concat(1, '你好', true, undefined, null, ["a", "b", "c"])console.log(arr)console.log(arr1)
5.4.6 slice
作用:截取
参数:
- 没有参数 截取全部
- 一个参数 从指定位置截取到最后
- 两个参数 从指定开始位置截取到指定的结束位置
- 这两个参数都是下标
- 开始位置(包含)
- 结束位置(不包含)
特点:不改变原数组
没有参数var arr = ['张三', '李四', '王五', '赵六'];var arr1 = arr.slice();console.log(arr1) // ["张三", "李四", "王五", "赵六"]一个参数var arr = ['张三', '李四', '王五', '赵六'];var arr2 = arr.slice(1);console.log(arr2) // ["李四", "王五", "赵六"]两个参数var arr = ['张三', '李四', '王五', '赵六'];var arr3 = arr.slice(1, 3);console.log(arr3) // ["李四", "王五"]
PS: 如果参数是负数 那么表示从后往前数 最后一个值是-1
5.4.7 splice
作用:用于操作数组成员
参数:
- 操作位置
- 删除个数
- 从第三个参数开始是添加的成员
返回值:被删除的那些成员组成的数组
特点:会改变原数组
var arr = ['张三', '李四', '王五', '赵六'];// 删除var result = arr.splice(1, 2)console.log(result); // ["李四", "王五"]console.log(arr); // ["张三", "赵六"]// 插入var arr = ['张三', '李四', '王五', '赵六'];var result = arr.splice(2, 0, '小绵羊');console.log(result); // []console.log(arr) // ["张三", "李四", "小绵羊", "王五", "赵六"]// 替换var arr =['张三', '李四', '王五', '赵六'];var result = arr.splice(2, 2, '小绵羊', '大绵羊');console.log(result); // ["王五", "赵六"]console.log(arr) // ["张三", "李四", "小绵羊", "大绵羊"]
5.4.8 indexOf
作用: 查找
返回值:下标
参数:
- 被查找的成员
- 查找的开始位置(可选)
var arr =['张三', '李四', '王五', '赵六'];var result = arr.indexOf('李四', 2);console.log(result); // -1console.log(arr); // ['张三', '李四', '王五', '赵六']
5.4.9 join
作用:转字符串
返回值:字符串
参数: 拼接符号(可选)
var arr =['张三', '李四', '王五', '赵六'];var str = arr.join();console.log(str); // 张三,李四,王五,赵六var str1 = arr.join('+');console.log(str1); // 张三+李四+王五+赵六var str2 = arr.join('❤');console.log(str2); // 张三❤李四❤王五❤赵六
5.4.10 reverse
作用:将数组的成员倒序
返回值:原数组
参数:无
特点:会改变原数组
var arr =['张三', '李四', '王五', '赵六'];var arr1 = arr.reverse();console.log(arr) // ["赵六", "王五", "李四", "张三"]console.log(arr1) // ["赵六", "王五", "李四", "张三"]console.log(arr === arr1) // true
5.4.11 sort
作用:将数组成员按照指定规则排序
返回值:原数组
参数:规则函数
特点:会改变原数组
//例一var arr = [1, 44, 6, -7, 99, 145, 5555, 0]var arr1 = arr.sort(function (a, b) {return a - b})console.log(arr) // [-7, 0, 1, 6, 44, 99, 145, 5555]console.log(arr1) // [-7, 0, 1, 6, 44, 99, 145, 5555]//例二var arr = [15, 8, 25, 3];arr.sort();console.log(arr);//[15, 25, 3, 8]
5.5 交换两个变量的值
var a = 4;var b = 5;// 交换两个变量的值要借助第三个变量var c = b;b = a;a = c;console.log(a); // 5console.log(b); // 4
