首先我们要知道什么是伪数组
伪数组:无法使用数组的方法和api,但是任然可以使用遍历数组的方式遍历他们。
<ul> <li>1li> <li>2li> <li>3li>ul><script type="text/javaScript"> var li = document.getElementByTagName("li"); console.log(li)script>
当我们查找所有li的时候,结果返回了一个数组格式的列表,和数组非常像,但是它并不是数组,数组中的api比如slice,splice它都不能用;但是它是可以被遍历的,它叫做NodeList(节点列表),是一个类数组对象,这种就是伪数组,当然伪数组还有函数的arguments参数。
把一个伪数组转换成一个真正的数组。
1.[].slice.call(obj) 这个等于Aray.prototype.slice.call(obj)
slice会通过索引位置获取新的数组,该方法不会修改原数组,只返回一个新的子数组,call会把this的指向改为传进去的obj。
var obj={ "0":"zhang", "1":18, length:2 } var newArr=[].slice.call(li) console.log(newArr)
2.es6的新语法 Array.from(obj)
var obj={ "0":"zhang", "1":18, length:2 }var newArr=[].slice.call(obj)console.log(newArr)
3.使用扩展运算符也是es6的语法
var newArr= [...obj]
如何判断真伪数组
let arr = [1,2,3];let arr1 = {naem:'wangcai',age:'99'};console.log(Array.isArray(arr)); //trueconsole.log(Array.isArray(arr1)); //false