更新说明:对文章排版以及内容格式做了调整。
更新时间:2022-05-04

构造函数Array

  • Array是JavaScript的原生对象,同时也是一个构造函数,可以用它生产新的数组,但由于Array作为构造函数的行为不一致,因此不建议使用。
  • new Array等同于 Array,加不加new一点影响都没有。
  • Array.of()返回由所有参数值组成的数组
  • Array.from()将具有iterator接口的对象转为数组
1
2
3
4
5
6
7
8
9
10
let a = new Array(3);
let a_b = Array(3)
let b = [undefined, undefined, undefined];

a[0] === undefined
b[0] === undefined
0 in a // false
0 in b // true

let c = Array.of(6,6,6) // [6,6,6]

静态方法

  • Array.isArray()

该方法返回一个布尔值,表示参数是否为数组,以来弥补typeof的不足。

实例方法

valueOf() toString()

  • 首先这个valueOf()是所有对象都拥有的方法,表示对该对象求值。然后,这个数组的valueOf方法返回数组本身。

let arr = [1,2,3];

arr.valueOf() //[1,2,3]

  • 这个toString()方法也是对象的通用方法,数组的toString()方法返回数组的字符串形式。

arr.toString() // 1,2,3

push() pop()

  • push()方法在数组末尾添加一个或多个元素,返回添加元素后数组的长度,会改变原数组。
  • pop()方法 删除数组的最后一个元素,返回删除的元素,会改变原数组。

shift() unshift()

  • shift()方法 删除数组的第一个元素,返回删除的元素,会改变原数组。
  • unshift()方法 在数组的开头添加一个或多个元素,返回添加元素后的数组长度,会改变原数组。

join()

  • join()方法以指定的参数作为分隔符,将所有数组成员连接为一个字符串返回,不提供参数,默认以逗号连接。
  • 字符串:Array.prototype.join.call(‘hello’,‘-’) => h-e-l-l-o

concat()

concat()方法用于多数组的合并,将新数组的成员,添加到原数组成员的后部,返回一个新数组,原数组成员不变。
除了数组作为参数,也可以接受其它类型的值作为参数。如果参数为对象,那么为浅拷贝:原对象发生改变,新生成的数组对象的值跟着发生改变。

reverse()

reverse 用于颠倒排列数组元素,返回改变后的数组,该方法将改变原数组。

slice()

  • slice方法可从已有的数组中返回选定的元素–返回一个新的数组,且原数组不会发生改变
  • 语法:arrayObject.slice(start,end)
  • start: 必填字段,规定从何处开始(索引0)选择。如果为负数,则是从数据尾部开始算起的位置。
  • end:可选字段,不包含该元素,如果包含该参数,则结果不包含该索引处的值。
  • 重要应用是将一个类数组的对象转化为真正的数组:Array.prototype.slice.call({ 0: ‘a’, 1: ‘b’, length: 2 })
  • “web/entry-runtime.js”.slice(3) -> “entry-runtime.js”

splice()

  • splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素,该方法会改变原数组。
  • 参数说明:第一个参数为删除的开始位置,第二个参数为删除的参数个数,如果后面还有参数,表示要被插入数组的新元素。起始位置如果是负数,表示从倒数位置开始删除。

sort()

  • sort方法对数组成员进行排序,默认按照字典顺序排序。排序后,原数组发生改变。
  • 按照自定义方式排序,可传入函数作为参数

map()

  • map()方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回,注意数组数组中的值是原始数据类型,确实不会改变原数组,但是如果值为引用数据类型,那么会对原数组进行更改。
  • map接受一个函数作为参数,参数依次为:当前成员、当前位置、数组本身
  • map还可以接受第二个参数,用来绑定回调函数内部的this变量。

forEach()

  • forEach()与map()方法很相似,也是对数组的所有成员依次执行参数函数。包含参数、第二个参数等与map完全一致,只是forEach不返回值,只是用来操作数据。

filter()

  • filter用于过滤数组成员,满足条件的成员组成一个新数组返回。
  • **接受一个函数作为参数,**参数依次为:当前成员、当前位置、数组本身
  • 数组的所有成员执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

find()

数组实例的find()方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。

includes()

判断一个数组中是否包含某个选项 [1, 2, 3].includes(2)

flat() flatMap()

数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。
以将flat(n)方法的参数写成一个整数,表示想要拉平的层数,默认为1。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。

flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。

some() every()

  • 与map、forEach、filter一样接受一个函数作为参数,且函数内参数一致。
  • some为只要一个成员的返回值是true,则整个some方法就返回true。
  • every为所有成员的返回值是true,则整个every方法就返回true。

reduce() reduceRight

  • reduce和reduceRight方法依次处理数组的每个成员,最终累计为一个值。
1
2
3
4
[1,2,3,4,5].reduce(function(a,b){
return a + b
})
// reduce方法求出数组所有成员的和。

reduce方法和reduceRight方法的第一个参数都是一个函数,该函数接受以下四个参数

  • 累积变量 – 默认为数组的第一个成员 必选
  • 当前变量 – 默认为数组的第二个成员 必选
  • 当前位置 – 从0开始 可选
  • 原数组 可选

indexOf lastIndexOf()

  • indexOf方法返回给定元素在数组中第一次出现的位置,如果没有则为-1.
  • indexOf还可以接收第二个参数,表示搜索的开始位置。