创建数组的四种方法:
1.字面量形式:
let arr = [];
2.构造函数:
let arr = new Array();
3.工厂方法:
let arr = Array();
4.ES6新增的of方法:
let arr = Array.of();
之前通过new Array()或者是Array()创建数组有一些问题:
1 如果没有传递参数,得到的是一个空数组
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424201730023-43265855.png)
2 如果传递了一个数字参数,得到的是带有一个长度的空数组
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424201811094-466563998.png)
3 如果传递一个非数字参数,得到的是带有一个成员的数组
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424201852547-882839658.png)
4 如果传递了多个非数字参数,得到就是一个带有多个参数的数组
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424201943782-140190094.png)
of方法是数组的一个静态方法,可以实现将所有传递的参数都作为数组中的成员存在
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424202118655-248098267.png)
实现of方法:
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424204726216-424622135.png)
判断数组的四种方法:
1.判断某个实例化对象和类(构造函数)的关系
obj instanceof Array
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424202707508-1609669283.png)
2.获取实例化对象的构造函数
obj.constructor === Array
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424202748510-1399462616.png)
3.ES5中构造函数调用的方法
Array.isArray(obj)
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424202814965-1638402409.png)
4.随便调用一个数组的方法,不是数组则报错
将类数组转为数组的方法:
类数组对象:可以通过索引值获取属性值,并且要具备length这一类对象
1.call和apply改变方法的调用对象
[].slice.apply(arrLike)
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424204138473-1672292497.png)
2.ES6新增的from方法
Array.from(arrLike, fn)
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424204302130-359127655.png)
from方法是用于遍历类数组对象,或将类数组对象转换成数组,是数组的静态方法。
fn: 执行的函数,有两个参数:成员值、索引值。作用域是全局作用域
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424204405123-174450547.png)
实现from方法:
![](https://img2020.cnblogs.com/blog/1880050/202104/1880050-20210424204841146-1369442167.png)