数组数据的类型可以不同。
数组的下标不是数字,而是字符串。
数组的下标可以不是数字字符串。

数组的创建

  1. let arr = [1,2,3];
  2. let arr1 = new Array(1,2,3);

数组的方法

静态方法

Array.isArray(arr) 是数组返回true
Array.of() 用来转化一组数值,主要是用来改善new Array()输入单数值时不生成数组的混乱。
Array.from()会将两类对象转为真正的数组:类似数组的对象(伪数组,例如用document.querySelectorAll选取的伪数组,需要有下标和length属性)和可遍历的对象(包括 ES6 新增的数据结构 Set 和 Map)。接受两个参数,第一个为转化对象,第二个为处理函数,对每个数组值进行处理后放入数组。判断是否可以转换请查看https://es6.ruanyifeng.com/#docs/array#Array-from

image.png

实例方法

image.png
arr.find(),arr.findIndex()
其他es6方法

对其中几个进行说明
arr.toString()用来将数组转化成字符串,与原形式相同
arr.concat()用来将新的成员添加到原数组后(可以是不同类型的值,因为数组的值不确定),原数组不变
arr.slice(start,end)用来截取数组片段,不包括end的值,省略end则一直到末尾,一般用arr.slice(0)来拷贝数组,原数组不变
arr.spllice(start,count,addelement1,addelement2,…)用来删除start开始的count个数组,然后加入后面的值,返回删除的成员,把count设置为0,可以用来插入元素,但是会改变原数组!!
arr.sort()排序是按照字符串排序,例如11在2之前,要接受函数才能进行数值排序,也可以接受函数自定义排序,接受判断返回值的正负以及0
arr.map()对每个成员执行函数,返回新数组,原数组不变

  1. [1, 2, 3].map(function(item, index, arr) //map会传入三个参数,成员、索引和数组本身
  2. return item * index;
  3. });
  4. // [0, 2, 6]
  5. var arr = ['a', 'b', 'c'];
  6. [1, 2].map(function (e) {//只传入函数一个参数,传入的是成员值
  7. return this[e];
  8. }, arr)//第二个参数用来绑定函数体中出现的this,把他指向arr这个数组
  9. // ['b', 'c']

arr.forEach()forEach与map大致相同,不同的是没有返回值,不改变原数组,forEach会跳过空位,但是不跳过undefined和null,另外forEach和for循环不同的是,for可以进行条件判断来中断循环,但是forEach永远会执行全部数组成员
arr.filter()与map语法相同,只是用法不同,用来返回对函数返回true的成员,filter是用来判断true或false的判断器
arr.some()和arr.every()语法和map相同,用法不同,some、map对所有数组成员执行函数,some只要有一个返回 true那么arr.some()就返回true,every需要全部成员返回true,arr.every()才会返回true
arr.reduce(function(累计变量,当前变量,(当前位置),(原数组)),累计变量初始值),从左向右对变量和累计变量进行处理,每一次处理返回累计变量,再对下一个数组成员和累计变量进行处理,返回累计变量,最终返回累计变量,arr.reduceRight()为从右往左。reduce可以做到map做的到的事,但是map不行。
image.png
arr.indexOf()和arr.lastIndexOf()是查看第一次出现的值的索引,接受第二个参数,为开始查找的位置,但是不可以查找NaN,因为这两个API用的是===,但是NaN!===NaN
arr.find()和arr.findIndex()语法与map相同,用来查找满足函数的成员、成员的索引,并补足了idnexOF()不能判断NaN的问题