定义
伪数组(类数组): 看起来想一个数组,可以使用length属性,无法使用数组的方法,其实质上是一个对象
与真数组的区别
- 1.真数组可以改变length的,伪数组不可以改变length
- 2.伪数组不可使用数组的方法,例如push等
- 3.伪数组的__proto__是Object,而数组的__protp__是Array
伪数组不可以使用数组的方法的原因
数组的底层构造器是Array,而Array是构造函数,它的方法都写在prototype上面,而伪数组的底层构造器是Object,不能的调用Array原型上的方法。
常见的伪数组
伪数组:函数内部的arguments,DOM对象列表(document.getElementsByTags),jQuery对象($(“div”))
伪数组转真数组
下面是一个伪数组
function person(name,age,sex) {
console.log(arguments);
console.log(arguments.length);
arguments.push(1);
}
person("丽丽",12,"女");
运行结果如下:
1.新定义一个数组,遍历伪数组,将伪数组里面的值一个个放入新数组
var arr =[];
function person(name,age,sex) {
console.log(arguments);
console.log(arguments.length);
for(var i = 0; i < arguments.length; i ++) {
arr.push(arguments[i])
}
console.log(arr);
}
person("丽丽",12,"女");
运行结果
2.使用Array.prototype.slice.call(lis),改变this指向伪数组
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
// 将伪数组变成真数组的方法
var lis = document.getElementsByTagName("li");
console.log(lis);
var liList = Array.prototype.slice.call(lis);
console.log(liList);
</script>
</body>
运行结果
3.使用ES6里面的from()方法
<script>
// 将伪数组变成真数组的方法
var lis = document.getElementsByTagName("li");
console.log(lis);
var liList = Array.from(lis);
console.log(liList);
</script>