类数组:一个简单的定义,如果一个对象有 length 属性值,则它就是类数组;组各种元素检索 API 返回的都是类数组,如 document.getElementsByTagName,document.querySelectorAll 等DOM API;function 中的 arguments 也是类数组。
方法一:Array.from
Array.from({ length: 3 })
方法二:...延展运算符
[...document.querySelectorAll("div")]
不过它只能作用于 iterable 对象,即拥有 Symbol(Symbol.iterator) 属性值,但是严格意义上来说,它不能把类数组转化为数组,如 { length: 3 }它将会抛出异常。
// Uncaught TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
[...{ length: 3 }]
方法三:借用 Array API 通过 call/apply 改变 this 或者 arguments
由于借用 Array API,一切以数组为输入,并以数组为输出的 API 都可以来做数组转换,如
Array (借用 arguments)
Array.prototype.concat (借用 arguments)
Array.prototype.slice (借用 this)
Array.prototype.map (借用 this)
Array.prototype.filter (借用 this)
方法四:for循环
let arr = []
for(let i in arrayLike){
arr[i] = arrayLike[i]
}