02-数组
# 数组的定义和使用
# 数组简介和定义
数组(Array),顾名思义,用来存储一组相关的值,从而方便进行求和、计算平均数、逐项遍历等操作。
# 定义数组
有三种方式定义数组。
// 方括号定义
var arr1 = ['A', 'B', 'C'];
// Array 构造,传入数组项
var arr2 = new Array('A', 'B', 'C');
// Array 构造,传入数组长度,所有项都是 undefined
var arr3 = new Array(3);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
数组长度,使用 length 属性获取,arr.length
。
# 角标越界和更改数组项
JavaScript 规定,访问数组中不存在的项会返回 undefined,不会报错。
如果更改的数组项超过了 length - 1
,则会创造这项,自动扩容,前面的填充 undefined。
# 数组类型的检测
- 数组用 typeof 检测结果是 object
- Array.isArray() 方法可以用来检测数组
- 后续还会介绍“鸭式辨型”检测方法
# 数组的常用方法
# 数组的头尾操作
- push:在数组未尾推入新项,参数就是要推入的项,如果要推入多项,可以用逗号隔
- pop :删除并返回数组中的最后一项
- unshift:在数组头部插入新项,参数就是要插入的项,如果要插入多项,可以用逗号隔开
- shift:删除并返回数组中的首项
# 元素的替换、插入、删除
splice() 方法格式:splice(num1, num2, n...m)
,表示从 num1 项开始,删除 num2 个元素,再插入 n...m 个元素。
splice() 方法会以数组的形式返回被删除的元素,没有删除则返回空数组。
注意:这里删除元素的个数和插入的个数不要求相等。
根据 splice() 方法的特点,可以用来替换、插入、删除元素。
splice() 用于元素的替换。
这里将 D、E 替换成了 X、Y、Z。
以上图为例,可以理解为,从 3 位置开始,删除 2 项,然后将后面的元素插入。
splice() 用来插入元素
上图表示,从 2 位置开始,删除 0 项,再插入后面的元素。
splice() 用于删除元素
从 2 位置开始,删除 4 项,不插入元素。
# 获取子数组
- slice() 方法用于得到子数组,类似于字符串的 slice() 方法
- slice(a, b) 截取的子数组从下标为 a 的项开始,到下标为 b(不包括)结束
- slice(a, b) 方法不会更改原有数组
- slice() 如果不提供第二个参数,则表示从指定项开始,提取所有后续所有项作为子数组
- slice() 方法的参数允许为负数,表示数组的倒数第几项
# 数组字符串互转
join() 和 split() 方法
- 数组的 join() 方法可以使数组转为字符串;字符串的 split() 方法可以使字符串转为数组。
- join() 的参数表示以什么字符作为连接符,如果留空则默,认以逗号分隔,如同调用 toString() 方法
- split() 的参数表示以什么字符拆分字符串,一般不能留空
'a-b-c-d'.split('-') // ["a", "b", "c", "d"]
'abcd'.split() // ["abcd"]
'abcd'.split('') // ["a", "b", "c", "d"]
1
2
3
2
3
# 数组合并
- concat() 方法可以合并连结多个数组
- concat() 方法不会改变原数组
下例中 arr1 不会改变。
# 数组反转
reverse() 方法用来将一个数组中的全部项顺序置反
# indexOf()、includes()、sort
- indexof() 方法的功能是搜索数组中的元素,并返回它所在的位置,如果元素不存在,则返回 -1
- includes() 方法的功能是判断一个数组是否包含一个指定的值,返回布尔值
- sort() 方法用于数组元素排序
# 引用类型
# 什么是引用类型
基本类型:number、boolean、string、undefined、null
引用类型:array、object、function、regexp...
基本类型进行相等判断时,会比较值是否相等
引用类型进行相等判断时,会比较址是否相等,也就是说它会比较是否为内存中的同一个东西
# 深克隆和浅克隆
- 使用 arr1=arr2 的语法不会克隆数组
- 浅克隆:只克隆数组的第一层,如果是多维数组,或者数组中的项是其他引用类型值,则不克隆其他层
- 深克隆:克隆数组的所有层,要使用递归技术
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19