JavaScript中的伪数组,伪数组转真数组

伪数组

什么是伪数组?
拥有length属性,无法直接调用数组方法,但可以通过下标对每个元素进行访问的数据集合就是伪数组。
有哪些常见的伪数组?
1.arguments
2.NodeList
下面我们来详细的介绍这两种伪数组:

arguments

arguments:类数组对象,js中每一个函数都会有一个Arguments的实例对象(arguments)。
特点:
1.arguments会将实参的值以数组的形式保存,以及传入的实参个数(length)
2.arguments的callee属性指向函数自己,(可以使用arguments.callee实现递归),如果想让一个匿名函数进行递归就可以使用arguments.callee;
3.arguments和函数中的形参是一一映射的(如第一个形参和arguments[0]的值是相等的,并且当形参改变时arguments[0]的值也会改变),
映射规则:
(1)当实参与形参的数量相等时,形参与arguments为映射关系(形参变量值改变时,相对的arguments[i]的值也改变,反过来也是一样的)
(2)当实参的数量少于形参量时,多出的形参与arguments不存在映射关系
(3)arguments和形参的映射机制是建里在函数执行后形参赋值的一瞬间,所以无法手动绑定。
*(在js严格模式下[在当前作用域的第一行添加“use strict”]下arguments不会产生映射,同时arguments.callee也不能使用);

NodeList

在一般情况下,nodelist是一个时实时集合(动态的),也就是说如果dom树发生改变,那么nodelist也会随之变化
例子:

<ul id="ul">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <script>
        var liAll = document.getElementsByTagName('li');
        console.log(liAll);

        // 删除掉其中一个
        document.getElementsByTagName('li')[2].remove();
        console.log(liAll);

结果
在这里插入图片描述
但是,如果你使用的document.querySelectorAll()获取dom就会返回一个静态的nodelist;

伪数组转真数组

1.简单的for循环,把类数组的每一项都遍历真数组中

2.使用call方法让伪数组能使用selice方法:
var arr=Array.prototype.sclice.call(伪数组);

3.es6中的Array.from
var arr=Array.from(伪数组);

4.展开运算符
var arr=[…伪数组];

5.和第二种方法是一样的,换了一种写法
var arr=[].sclice.call(伪数组);

(如果这篇文章有什么问题请及时联系我!)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值