伪数组与数组
数组和伪数组的区别
-
伪数组是一个对象(Object),而真实的数组是一个数组(Array)也是对象
-
拥有length属性,且
必须是number类型
,其它属性(索引)为字符串
-
不具有数组所具有的方法
,forEach()等,不过有Object的方法 -
伪数组
长度不可变
,真数组长度可以变 -
可以通过
for in
遍历 -
伪数组没有
Array.prototype
,它只是一个对象
判断是否是数组
Array.isArray(arr) //true
arr instanceof Array //true
常见的伪数组
- 参数数组:arguments
- DOM对象列表HTMLCollection():比如通document.getElementsByTagName得到的列表
- jquery对象:比如$(“div”)
伪数组存在的意义
让一些对象也可以使用数组方法,可以通过call() bind() apply()
方法实现
- 注意,方法的返回值类型不会改变,返回数组的还是会返回数组
伪数组转换为真数组
-
使用ES6中的Array.from方法
-
使用扩展运算符,也是ES6的语法
-
使用Array.prototype.slice.call();
arr = Array.prototype.slice.call(fakeArray)
-
使用[].slice.call()
var arr = [].slice.call(fakeArray)