一、什么是伪数组?
伪数组具有以下特点:
- 伪数组具有length属性,但length属性不是动态的,不会随着成员的变化而变化;
- 可以通过索引找到具体的值;
- 伪数组可以通过for循环遍历每一项;
- 伪数组不具备数组的push(), forEach()等方法。
- 伪数组本质是一个 Object,而真实的数组是一个 Array。
二、如何将伪数组转换为真正的数组?
var arrLike = {
"0": "1",
"1": "2",
"length": 2
};
方法1、遍历伪数组,将每一项push到新数组中
var arrLike = {
"0": "1",
"1": "2",
"length": 2
};
var newArr = [];
for (var i = 0; i < arrLike.length; i++) {
newArr.push(arrLike[i]);
}
console.log(newArr);
方法2、slice.call()方法
var arrLike = {
"0": "1",
"1": "2",
"length": 2
};
var newArr = [].slice.call(arrLike);
console.log(newArr);
方法3、拓展运算符方法
<div class="box">
<p>1</p>
<p>2</p>
<p>3</p>
</div>
<script>
var ps = document.querySelectorAll('p');
var newArr = [...ps];
console.log(newArr);
</script>
方法4、Array.from()方法
var arrLike = {
"0": "1",
"1": "2",
"length": 2
};
var newArr = Array.from(arrLike);
console.log(newArr);
方法5、改变原型指向
var arrLike = {
"0": "1",
"1": "2",
"length": 2
};
arrLike.__proto__ = Array.prototype;
console.log(arrLike);
//通过改变原型指向,arrLike就继承了Array.prototype中的方法
//可以使用push(),unshift()等方法了,length值也会随之动态改变。