我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解javascript中的类数组

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解javascript中的类数组

这篇文章给大家介绍详解javascript中的类数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

什么是类数组

顾名思义,这玩意儿肯定是个长得像数组,但又不算数组的东西。那到底是个啥,其实它就是一个对象,一个长的像数组的对象。

和数组的区别

那类数组和数组有啥区别:
1、都有length属性
2、类数组也可以for循环遍历,有的类数组还可以通过 for of 遍历
3、类数组不具备数组的原型方法,因此类数组不可调用相关数组方法(如,push,slicec,concat等等)

都有哪些类数组

常见的类数组有

  • 函数的参数arguments

  • 通过getElementsByTagName,getElementsByClassName,getElementsByName等方法获取的dom列表(也叫 HTMLCollection)

  • 通过querySelectorAll()方法获取的NodeList节点列表

下面,我们来分别看一下这3类 类数组

arguments

arguments是javascript的一个关键字。专指函数的参数集合,它包含了函数的所有参数以及其他属性。它无需定义,可直接在函数体内使用

function args(a, b, c) {console.log(arguments)console.log(typeof arguments)console.log({}.toString.call(arguments))}args('a', 'b', 'c')

我们看看输出结果

详解javascript中的类数组

可以看出,arguments包含所有参数,并且存在length属性,同时可以看出,他的类型是object,并且转换为string后 是 object Arguments,代表是Arguments对象。同时,可以看到,他还有一个属性callee,而这个属性的值好像就是我们定义的这个函数体,那么我们输出看一下

function args(a, b, c) {console.log(arguments.callee)}args('a', 'b', 'c')

详解javascript中的类数组

可以看到,输出的确实是我们函数自己。那既然表示的自己,请不要随便去调用这个属性,因为一旦调用,会不断的调用自己,进入死循环,直到栈溢出。就像下面这样

function args (a, b, c) { console.log(123) arguments.callee()}args('a', 'b', 'c')

详解javascript中的类数组

dom列表(HTMLCollection)

这一类是指通过getElementsByTagName或者 getElementsByClassName 或者 getElementsByName获取到的dom列表的集合。

<div>今天天气不太好</div><div>因为下雨了</div><script> var domList = document.getElementsByTagName('div') console.log(domList) console.log(typeof domList) console.log({}.toString.call(domList))</script>

详解javascript中的类数组

可以看出,domList也存在length属性。并且,转换为string后是 object HTMLCollection。代表是HTMLCollection对象

节点列表(NodeList)

通过document.querySelectorAll()所获取的节点的集合

<div class="abc">今天天气不太好</div><div class="abc">因为下雨了</div><script> var nodeList = document.querySelectorAll('div') console.log(nodeList) console.log(typeof nodeList) console.log({}.toString.call(nodeList))</script>

详解javascript中的类数组

可以看出,nodeList同样存在length属性,且转换成string后是 object NodeList,代表是NodeList对象。该对象是一个符合Iterator接口规范的对象,故它可以被for…of遍历(什么是Iterator我就不在这里讲述了,大家可以自己去看 什么是Iterator)

特点

类数组都不存在数组的原型方法,但当类数组需要调用数组方法去做任何事情时,可以通过以下方式

  • 利用call,apply进行方法借用,借用数组的各自方法

  • 将类数组转换为数组。然后再调用数组方法

call,apply进行方法借用

其实我们上面也已经用过这个方法了,类数组转为字符串时,我们上面是不是借用了对象的toString()方法啊

下面我们再多列几个

function args(a, b, c) { Array.prototype.push.call(arguments, '123') console.log(arguments) Array.prototype.splice.call(arguments, 0, 1) console.log(arguments) Array.prototype.unshift.apply(arguments, [1,2,3]) console.log(arguments)}args('a', 'b', 'c')

详解javascript中的类数组

类数组转数组

将类数组转成数组后,就可以随意调用各自数组方法,那么类数组如何转成数组呢!

可借用数组的一些方法生成一个新数组

function args(a, b, c) { let arr = Array.prototype.slice.call(arguments) console.log(arr) arr = Array.prototype.concat.apply([], arguments) console.log(arr)}args('a', 'b', 'c')

详解javascript中的类数组

利用ES6新增方法转换为数组

ES6新增了一个Array.from方法,可将类数组转为数组。还提供了展开运算符,可以直接在一个数组中展开类数组

function args(a, b, c) { let arr = Array.from(arguments) console.log(arr) arr = [...arguments] console.log(arr)}args('a', 'b', 'c')

详解javascript中的类数组

关于详解javascript中的类数组就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解javascript中的类数组

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解javascript中的类数组

这篇文章给大家介绍详解javascript中的类数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是类数组顾名思义,这玩意儿肯定是个长得像数组,但又不算数组的东西。那到底是个啥,其实它就是一个对象,一个长的像数组的
2023-06-08

JavaScript中的class类详解

JavaScript 中的类(Class)是一种新的语言特性,它让我们可以使用面向对象编程的思想来更加方便地组织和管理代码。在本文中,我们将详细介绍 JavaScript 中的类特性,感兴趣的同学可以借鉴阅读
2023-05-19

JavaScript中新数组分组方法详解

JavaScript中的新数组分组方法提供了将数组元素分组到对象中的强大功能。reduce()方法和Array.prototype.groupBy方法提供灵活的分组选项,而lodash_.groupBy方法为常见场景提供了方便的解决方案。这些方法简化了数据组织和聚合任务,增强了代码的可读性和可维护性,提升了开发人员的效率。
JavaScript中新数组分组方法详解
2024-04-02

详解JavaScript中数组的一些特殊用法

数组是几乎所有编程语言的基础语法,本文将不会介绍数组的基础语法和用法,而是从JavaScript中数组的一些特殊之处入手,通过这些少有特性的详细介绍,加深我们对数组的理解
2023-02-20

JavaScript数据类型的转换详解

JavaScript是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。本文就来和大家聊聊JavaScript中的数据类型转换,感兴趣的小伙伴可以了解一下
2022-12-22

详解JavaScript中原始数据类型Symbol的使用

Symbol是es6引入的一个新的原始数据类型,是一个独一无二的值。这篇文章主要为大家介绍了JavaScript中原始数据类型Symbol的使用,感兴趣的可以了解一下
2023-02-22

关于JavaScript的Array数组方法详解

这篇文章主要介绍了关于JavaScript的Array数组方法详解,数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中,它是最简单的数据结构之一,需要的朋友可以参考下
2023-05-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录