一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
数组的索引
javascript数组是一种特殊的对象,用于访问数组元素的方括号与用于访问对象属性的方括号是类似的。可以在数组上以任意名字创建属性。javascript没有“越界”错误,对于不存在的索引,javascript返回undefined。
let arr = [1,2,3,4]
arr[5]//=>undefined
arr["a"]//=>undefined
属性名介于1至2^32-2之间的整数会作为数值索引。javascript数组会将数值索引转换为字符串,然后再将这个字符串作为属性名。因此,对于非负整数字符串,JavaScript也会将其作为数值索引。
let arr = [1,2,3,4]
arr[0]//=>1
arr["0"]//=>1,数值和字符串属性名是同一个
arr[1.0]//=> 2,注意1.0转化成字符串后是"1",因此是数值索引。
arr["1.0"]//=>undefined,注意索引是1.0和"1.0"的区别。
当使用数值索引访问数组时,javascript会自动维护length属性的值。当使用非数值索引访问数组时,会被当成常规的对象属性,javascript不会维护length属性值。
let arr = [1,2,3,4]//length=4
arr[4]="a"//=>length=5,非负整数,javascript会将其作为数值索引,动态维护length属性
arr["5"]="b"//=>length=6,非负整数字符串,javascript会将其作为数值索引,动态维护length属性
arr["c"]="c"//length=6,普通对象属性,javascript不会维护length属性值
稀疏数组
稀疏数组的length属性的值会大于元素的个数。可以使用Array()构造函数,或者给大于当前数组length的数组索引赋值。
let a = new Array(5) //没有元素,但a.length是5
let a = []//没有元素,a.length是0
a[1000]=0//赋值增加了一个元素,但length变成了1001
通过省略数组字面量中的值,也会得到稀疏数组
let a = [,,,]//数组没有元素,但a.length是3
let a2 = [undefined]//这个数组有一个undefined元素
0 in a1//false
0 in a2//true
数组长度
数组中任何元素的索引都不会大于数组的length。JavaScript会自动维护length的值。
- 如果给一个索引为i的数组元素赋值,而i大于或等于数组当前的length,则数组的length属性会被设置为i+1。
len a = [1,2,3,4]//a.length = 4
let a[10] = 0// a.length=11
- 如果将length属性设置为一个小于其当前值的非负整数n,则任何索引大于或等于n的数组元素都会从数组中被删除。
let a = [1,2,3,4]//a.length = 4
a.length = 2//a变成了[1,2]
a.length = 5 // [1, 2, empty × 3]
添加和删除数组元素
- 添加数组元素
- 给数组的新索引赋值
let a = []
a[0] = 1;
a[1] = 2;
- 使用push()方法在数组的末尾添加一个元素
let a = []
a.push(1);//[1]
a.push(2);//[1,2]
- 使用unshift()方法在数组的开头插入一个元素
let a = []
a.unshift(1);//[1]
a.unshift(2);//[2, 1]
- 删除数组元素
- 使用delete操作符删除数组元素,不会改变数组的length值,删除后数组会变稀疏。
let a = [1,2,3,4]
delete a[1]//[1, empty, 3, 4]
- 把数组length属性设置一个新的长度值,也可以从数组末尾删除元素。
let a = [1,2,3,4]
a.length = 2//[1,2]
- 使用pop()方法,在数组的末尾删除一个元素
let a = [1,2,3,4]
a.pop()//[1,2,3]
- 使用shift()方法,在数组的开始删除一个元素
let a = [1,2,3,4]
a.shift()//[2,3,4]
- splice(startIndex, deleteCount, ...items)是一个可以插入、删除、替换数组元素的通用方法。
let a = [1,2,3,4]
a.splice(0, 0, 1,2) //从0开始添加元素1,2。[1,2,1,2,3,4]
a.splice(0, 2) //从0开始删除2个元素[1,2,3,4]
a.splice(0,2,2,4) //将从0开始的两个元素,替换为2,4[2,4,3,4]