什么是伪数组?
1.具有length属性,可以获取长度。
2.具有索引,可以通过遍历获取所有元素。
3.不可以使用数组的内置方法和属性。
常见的伪数组
1.函数的内置对象arguments,它是所有实参组成的伪数组。
2.DOM对象组成的伪数组,通过document.querySelectorAll等获得的dom对象列表(nodelist)。
3.jQuery对象组成的伪数组
伪数组转真数组
1 遍历转换
(function(){
console.log(arguments)
// Arguments(6) [1, 2, 3, 4, 5, 6, callee: ƒ, Symbol(Symbol.iterator): ƒ]
let newArr = [];
for(let k in arguments){
newArr[k] = arguments[k];
}
newArr.forEach((item, index) => {
console.log(item, index);
});
//1 0
// 2 1
// 3 2
// 4 3
// 5 4
// 6 5
})(1,2,3,4,5,6)
2 扩展运算符
(function(){
console.log([...arguments])
// Arguments(6) [1, 2, 3, 4, 5, 6, callee: ƒ, Symbol(Symbol.iterator): ƒ]
let newArr = [...arguments];
newArr.forEach((item, index) => {
console.log(item, index);
});
//1 0
// 2 1
// 3 2
// 4 3
// 5 4
// 6 5
})(1,2,3,4,5,6)
3 通过 [].slice.call()实现
(function(){
console.log(arguments)
// Arguments(6) [1, 2, 3, 4, 5, 6, callee: ƒ, Symbol(Symbol.iterator): ƒ]
let newArr = [];
// 借用真数组上的slice方法浅复制出一个新的真数组
newArr = [].slice.call(arguments);
newArr.forEach((item, index) => {
console.log(item, index);
});
//1 0
// 2 1
// 3 2
// 4 3
// 5 4
// 6 5
})(1,2,3,4,5,6)
4 Array.from()实现
(function(){
console.log(arguments)
// Arguments(6) [1, 2, 3, 4, 5, 6, callee: ƒ, Symbol(Symbol.iterator): ƒ]
let newArr = [];
newArr = Array.from(arguments);
newArr.forEach((item, index) => {
console.log(item, index);
});
//1 0
// 2 1
// 3 2
// 4 3
// 5 4
// 6 5
})(1,2,3,4,5,6)