《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念,听到的时候还以为是说CSS的伪类呢,网上一查,这东西原来还是个很常见的家伙。

何为伪数组

伪数组有两个特点:

  1. 具有length属性,其他属性(索引)为非负整数
  2. 但是却不具备数组的方法
    也就是看起来像是数组,然而并不是…

举个例子看看

  1. 函数内部的arguments
function testArguments(a, b, c) {console.log(`arguments is array: ${Array.isArray(arguments)}`);console.log(arguments[0]);console.log(arguments[1]);console.log(arguments[2]);
}
testArguments(1,2,3);

test result
2. DOM列表

  1. JQuery选择得出的列表: $(‘div’)
    随意找一个使用jq的网站,例如:https://www.jq22.com/

如何判断真伪数组

  1. 使用instanceof 方法
  2. 使用Array.isArray()方法: 未必准确,见下文, 使用伪数组.__proto__ = Array.prototype;转换后不可用。
  3. 伪数组.constructor === Array; 适用于带constructor的场景
  4. Object.prototype.toString.call(arr) === ‘[object Array]’

尝试一下:

function testArguments(a, b, c) {console.log(`arguments is array: ${Array.isArray(arguments)}`);console.log(`arguments is array: ${arguments instanceof Array}`);console.log(`arguments is object: ${arguments instanceof Object}`);const newArguments = Array.prototype.slice.call(arguments);console.log(`newArguments is array: ${Array.isArray(newArguments)}`);console.log(`newArguments is array: ${newArguments instanceof Array}`);console.log(`newArguments is object: ${newArguments instanceof Object}`);
}testArguments(1,2,3);

如何把伪数组转换成数组

  1. Array.prototype.slice.call(); / Array.prototype.slice.apply();
  2. 原型继承: 伪数组.__proto__ = Array.prototype;arguments 无影响正常使用
  3. ES6中数组的新方法 from()
方法一: Array.prototype.slice.call(); / Array.prototype.slice.apply();
function testArguments(a, b, c) {console.log(`arguments is array: ${Array.isArray(arguments)}`);console.log(arguments[0]);console.log(arguments[1]);console.log(arguments[2]);const newArguments = Array.prototype.slice.call(arguments);console.log(`newArguments is array: ${Array.isArray(newArguments)}`);console.log(newArguments[0]);console.log(newArguments[1]);console.log(newArguments[2]);
}
testArguments(1,2,3);

方法二: 原型继承: 伪数组.__proto__ = Array.prototype;arguments 无影响正常使用
使用该方法进行转换时,Array.isArray()方法不可用来进行判断。

方法三: ES6中数组的新方法 from()

尝试一下:

function testArguments(a, b, c) {console.log(`arguments is array: ${Array.isArray(arguments)}`);console.log(`arguments is array: ${arguments instanceof Array}`);const newArguments = Array.from(arguments);console.log(`newArguments is array: ${Array.isArray(newArguments)}`);console.log(`newArguments is array: ${newArguments instanceof Array}`);
}
testArguments(1,2,3);

总结

  1. 在使用判断是否为数组时,如果无法知道数组是否可能是使用“原型继承”的方法转换得到的,就不要使用Array.isArray()方法判断对象是否为数组的方法。
  2. 在写转换方法时,由于原型继承: 伪数组.__proto__ = Array.prototype;可能存在判断失误,尽量使用Array.prototype.slice.call(); / Array.prototype.slice.apply();如果可以使用ES6,使用Array.from()方法较为简单明了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C ++ 和 C语言的优缺点分别是什么?

C语言,它简直就是编程世界的一块磐石。简洁、直接,让人一眼就能明白它想干嘛。它的运行速度快,接近硬件操作,特别适合那些需要直接与硬件打交道的场景。但就是因为这种接近硬件的特性,C语言在抽象层次上就显得有点捉襟…

【MCU开发规范】:MCU的性能测试

MCU的性能测试 前序性能评判方法MIPSCoreMark EEMBC其他参考 前序 我们平时做MCU开发时,前期硬件选型(选那颗MCU)基本由硬件工程师和架构决定,到软件开发时只是被动的开发一些具体功能,因此很少参与MCU的选型。 大部分…

linux(ub)-redis环境部署

1.下载redis包 wget http://download.redis.io/releases/redis-7.0.5.tar.gz 2.解压缩: tar -zxvf redis-7.0.5.tar.gz 3.安装gcc:sudo apt-get install gcc 4. 编译:cd redis-7.0.5 make make make install 5. cd /usr/local/bin/ 6. mkdir …

SSL证书和IP证书的区别

SSL证书是一种用于保障网络传输安全的数字证书,它通过为网站提供加密服务,确保用户与网站之间交换的数据不被第三方截取或篡改。IP证书是一种用于验证和保护IP地址的数字证书。它是通过将IP地址与其所有者的身份信息相联系,从而确保IP地址的真…

哪种裤子比较百搭?显高显瘦的男生裤子分享

选到合适的裤子才能穿得好看以及舒服。可是市面上也出现了不少各种裤子质量达不到标准的负面新闻,为了能够选到合适的裤子,我自费购买了多个品牌的裤子测评。之后我知道很多网红品牌为了压低成本,用料和做工都很差,于是我总结了五…

Springboot框架入门介绍——1.快速搭建启动程序框架

如果使用过spring可能会为繁琐复杂的配置项感到头疼,而springboot内嵌了tomcat和jetty容器,简化了maven配置,基于注解的0配置思想,同时可以和各种其他框架无缝整合,实现快速开发spring应用框架。 这里需要记住一句话&a…

ssl证书怎么部署,有免费的吗?

SSL(Secure Sockets Layer)证书,也就是安全套接字层证书,为网络通信提供安全及数据完整性保障,成为了在线交易和数据传输不可或缺的一部分。那么,SSL证书如何部署?又是否有免费的选择呢&#xf…

JavaEE之锁策略,cas 和 synchronized 优化过程深入浅出

目录 题外话 正题 锁策略 乐观锁和悲观锁 轻量锁和重量锁 CAS算法(Compare And Swap) 自旋锁和挂起等待锁 普通互斥锁和读写锁 公平锁和非公平锁 可重入锁和不可重入锁 synchronized原理 基本特点 锁升级 其它锁优化 锁消除 锁粗化 小结 题外话 时间紧任务重,直…

Java——类和对象

目录 一.类定义和使用 1.简单认识类 2.类的定义格式 3.注意事项 二.课堂练习 1.定义一个狗类 2.定义一个学生类 3.注意事项: 三.类的实例化 1.什么是实例化 2.注意事项 3.类和对象的说明 四.this引用 1.为什么要有this引用 2.什么是this引用 五.对…

从零开始学习Linux(1)---基本命令(1)

1.学习准备 我学习Linux是使用xshell远程登录自己的云服务器来进行。 xshell是一个远程终端管理软件,下载官网: https://www.netsarang.com/products/xsh_overview.htm 下载安装的时候选择 "home/school"…

简单逆向案例,某留言板载荷参数逆向

网址:aHR0cHM6Ly9saXV5YW4ucGVvcGxlLmNvbS5jbi90aHJlYWRzL2xpc3Q/Y2hlY2tTdGF0dXM9MCZmaWQ9NTYzJmZvcm1OYW1lPSVFNyVBNiU4RiVFNSVCQiVCQSVFNyU5QyU4MSVFNSVBNyU5NCVFNCVCOSVBNiVFOCVBRSVCMCVFNSU5MSVBOCVFNyVBNSU5NiVFNyVCRiVCQyZwb3NpdGlvbj0wJnByb3ZpbmNlPTIwJmNp…

理解计算中的随机性与伪随机性:Avi Wigderson的理论计算科学贡献

目录 前言1 随机性和伪随机性在计算中的角色2 随机性的动态理解3 伪随机性的应用4 理论到实践的应用结语 前言 近期,普林斯顿大学数学教授Avi Wigderson荣获了2023年图灵奖,以表彰他在理论计算机科学领域的杰出贡献。他的研究聚焦于计算复杂性理论&…

HuggingFists-如何复用流程(二)

上一篇文章中,我们介绍了如何在HuggingFists系统中复用流程。如何定义流程,接收外部数据流以及写出数据流。通过接收和写出数据流实现流程的嵌套引用。在实际的应用场景中,被引用的子流程除了需要与主流程的数据流进行交互外,有时其流程内部的…

鸿蒙端云一体化开发--调用云函数--适合小白体制

如何实现在端侧调用云函数? 观看前,友情提示: 不知道《如何一键创建端云一体化模板》的小白同学,请看: 鸿蒙端云一体化开发--开发云函数--适合小白体制-CSDN博客 实现方法: 第一步:添加依赖 …

什么是人力资源成本?人力资源成本有哪些?

人力资源成本是企业运营成本的重要组成部分,对企业的财务状况和经营效率有着直接影响,如今企业面临着持续的成本压力和效率挑战。人力资源成本不仅直接关联企业的运营效率,还影响着企业的长期战略发展。因此,如何优化人力资源成本…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

判断IQ水平-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第50讲。 判断IQ水平&#…

【投稿优惠-EI稳定检索】2024年设计、数字化技术与新闻传播国际学术会议(ICDDTJ 2024)

2024 International Conference on Design, Digital Technology and Journalism 网址:www.icddtj.com 邮箱: icddtjsub-conf.com(备注于老师推荐享投稿优惠) 投稿主题请注明:ICDDTJ 2024通讯作者姓名(否则无法确认您的稿件&…

大厂Java笔试题之判断一个数是否自守数

题目:自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 625,76^2 5776,9376^2 87909376。 请求出n(包括n)以内的自守数的个数 数据范围: 1≤n≤10000 输入描述: int型整数 输出描述&…

Linux安装及管理程序

目录 一.Linux应用程序基础 1.应用程序与系统命令的关系 2.典型应用程序的目录结构 3.常见的Linux软件包封装类型 二.RPM 软件包管理工具 1.RPM 软件包管理器 Red-Hat Package Manger 2.RPM软件包 3.RPM命令 三.源代码编译安装 1. yum 软件包管理器: 配…