,,javascript类数组的深入理解

,,javascript类数组的深入理解

本文主要介绍对javascript类数组的深入理解,通过示例代码非常详细的介绍,对你的学习或者工作有一定的参考价值。有需要的朋友就跟着下面的边肖学习吧。

Js数组大家都很熟悉,因为到处都要用到,但是它有一个“孪生兄弟”叫类数组(也叫伪数组)。有些人可能知道,有些人不知道。今天,我们来看看。

什么是类数组

顾名思义,这个东西一定是看起来像数组的东西,但它不是数组。那是什么?其实就是一个对象,一个长的像数组一样的对象。

和数组的区别

类数组和数组有什么区别:

1.两者都有长度属性。

2.类数组也可以被for循环遍历,有些类数组也可以被for of遍历。

3.类数组没有数组的原型方法,所以相关的数组方法(如push、slicec、concat等。)不能由类数组调用。

都有哪些类数组

常见的类数组有

函数的参数

通过getElementsByTagName、getElementsByClassName、getElementsByName等方法获得的Dom列表(也叫HTMLCollection)

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

接下来,我们来分别看看这三种类型的类数组。

arguments

Arguments是javascript中的一个关键字。指一个特殊函数的参数集,包含该函数的所有参数和其他属性。它不需要定义,可以直接在函数体中使用。

函数参数(a,b,c) {

console.log(参数)

console.log(参数类型)

console . log({ } . tostring . call(arguments))

}

参数(“a”,“b”,“c”)

我们来看看输出结果。

可以看到实参包含了所有的参数,还有长度属性。同时可以看出他的类型是object,转换成string后是object Arguments,代表Arguments对象。同时我们可以看到他还有一个属性callee,这个属性的值好像就是我们定义的函数体,我们输出来看看。

函数参数(a,b,c) {

console.log(arguments.callee)

}

参数(“a”,“b”,“c”)

如您所见,输出确实是我们的函数本身。既然表示自身,请不要随便调用这个属性,因为一旦调用,它会一直调用自身,进入无限循环,直到堆栈溢出。就像下面这样。

函数参数(a,b,c) {

console.log(123)

arguments.callee()

}

参数(“a”,“b”,“c”)

dom列表(HTMLCollection)

此类别是指通过getElementsByTagName或getElementsByClassName或getElementsByName获得的dom列表集合。

Div,今天天气不太好/div

因为下雨了/div

脚本

var DOM list=document . getelementsbytagname(' div ')

console.log(domList)

console . log(DOM list的类型)

console . log({ } . tostring . call(DOM list))

/脚本

可以看出,domList也有length属性。并且,转换成字符串后,是object HTMLCollection。是HTMLCollection对象。

节点列表(NodeList)

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

今天的天气不太好

因为下雨了

脚本

var nodeList=document . query selector all(' div ')

console.log(节点列表)

console.log(节点列表的类型)

console . log({ } . tostring . call(nodeList))

/脚本

可以看到NodeList也有length属性,转换成string后就是object NodeList,代表nodeList对象。这个对象是符合迭代器接口规范的对象,所以可以被for…of遍历(这里不告诉你迭代器是什么,你自己看迭代器是什么)。

特性

任何类中都没有数组的原型方法,但是当一个类数组需要调用数组方法来做任何事情时,可以通过以下方式来完成

使用call和apply来借用方法,并借用数组的各个方法。

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

call,apply进行方法借用

其实上面我们已经用过这个方法了。当类数组转换成字符串时,我们是否借用了上面对象的toString()方法?

下面再列举几个吧。

函数参数(a,b,c) {

Array.prototype.push.call(参数,“123”)

console.log(参数)

Array.prototype.splice.call(参数,0,1)

console.log(参数)

array . prototype . un shift . apply(arguments,[1,2,3])

console.log(参数)

}

参数(“a”,“b”,“c”)

类数组转数组

类数组转换成数组后,可以随意调用各自的数组方法,那么类数组如何转换成数组呢?

你可以借用数组的一些方法来生成一个新的数组。

函数参数(a,b,c) {

let arr=array . prototype . slice . call(参数)

console.log(arr)

arr=array . prototype . concat . apply([],参数)

console.log(arr)

}

参数(“a”,“b”,“c”)

通过ES6新方法转换为阵列

ES6增加了Array.from方法,可以把类数组变成数组。还提供了扩展运算符,可以直接扩展数组中的类数组。

函数参数(a,b,c) {

让arr=Array.from(参数)

console.log(arr)

arr=[.参数]

console.log(arr)

}

参数(“a”,“b”,“c”)

好了,类数组到此为止。欢迎大家一起探讨。

总结

这就是这篇关于javascript类数组的文章。更多相关的javascript类数组,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: