当前位置: 首页 > article >正文

说一说JS伪数组和数组的区别?

    • 伪数组和数组在JavaScript中都是用来存储一系列值的容器,但它们有一些关键的区别:

      1. 定义方式

      • 数组:通过使用 [](空方括号)创建,或者使用 Array 构造函数。

        let arr = [1, 2, 3]; 
        let arr2 = new Array(1, 2, 3);

      • 伪数组:通常不是直接创建的,而是由一些特定的对象实现的,如 arguments 对象(函数中的参数列表)或 DOM 方法返回的结果集,如 document.querySelectorAll 返回的 NodeList

      2. 原型链

      • 数组:继承自 Array.prototype,拥有数组特有的方法,如 .push().pop().map().filter() 等。
      • 伪数组:通常继承自 Object.prototype,不直接拥有这些数组方法,但可以通过一些转换方法(如 Array.prototype.slice.call())来获得数组的方法。

      3. .length 属性

      • 数组.length 属性表示数组中元素的个数,是可变的。
      • 伪数组:也具有 .length 属性,但这个属性是只读的,不能通过 .length 来修改数组的长度。

      4. 方法访问

      • 数组:可以直接访问如 .push().pop() 等数组方法。
      • 伪数组:不能直接使用这些方法,但可以通过转换为真正的数组来实现相同的功能。

      5. 示例

      • 数组

        let arr = [1, 2, 3];
        console.log(arr.length); // 3
        arr.push(4);
        console.log(arr.length); // 4

      • 伪数组

        let伪数组 = document.querySelectorAll('li');
        console.log(伪数组.length); // 3
        // 使用Array.prototype.slice.call()将伪数组转换为真正的数组
        let真数组 = Array.prototype.slice.call(伪数组);
        真数组.push(4);
        console.log(伪数组.length); // 3,伪数组的length属性不可变

      转换伪数组为数组

      虽然伪数组没有数组的原生方法,但可以通过以下几种方式将其转换为真正的数组:

      • 使用 Array.prototype.slice.call()

         
        let真数组 = Array.prototype.slice.call(伪数组);

      • 扩展运算符 ...

         
        let真数组 = [...伪数组];

      • Array.from() 方法:

         
        let真数组 = Array.from(伪数组);

      通过这些方法,可以充分发挥数组的强大功能来处理伪数组。


http://www.kler.cn/a/404960.html

相关文章:

  • 为什么VScode不能连服务器,MobaXterm可以连
  • 如何使用本地大模型做数据分析
  • 细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
  • 【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
  • 南京邮电大学算法设计-二叉树先序遍历算法动态演示
  • 简单分析数据被序列化后的内容
  • 云原生基础-云计算概览
  • 算法-二分查找2(代码笔记)
  • 在 Ubuntu 上配置防火墙以开放特定端口
  • 【Redis_Day5】String类型
  • Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
  • SQL面试题——交叉窗口计算
  • es执行_update_by_query要注意
  • Mac系统下配置 Tomcat 运行环境
  • 基于边缘计算技术的机器状态监测系统
  • 2024年11月17日Github流行趋势
  • 数据库视图-多表
  • 力扣题解(新增道路查询后的最短距离II)
  • 自适应安全框架(ASA)在网络安全2.0新防御体系中的应用
  • Mybatis框架之模板方法模式 (Template Method Pattern)
  • 深入理解 Java 阻塞队列:使用场景、原理与性能优化
  • 11.21Scala
  • reids基础
  • 软件测试最全单元测试之mock使用_maven项目mock单元测试,2024年最新关于软件测试性能优化的几点建议
  • Scala中Arry
  • w048基于web的校园资料分享平台