📕 重学JavaScript:怎么处理arguments这种伪数组?

简介: 平时我们写代码的时候,有没有想到过这样的问题:类似于func01(num, name){} 中的 num, name 到底是什么类型的呢?我们该怎么处理它呢?

嗨,大家好!这里是道长王jj~ 🎩🧙‍♂️

平时我们写代码的时候,有没有想到过这样的问题:🤔

  1. 类似于func01(num, name){} 中的 num, name 到底是什么类型的呢?它有可能是一个数组在函数中运行吗?
  2. 我们搞懂它有什么意义?

其实,这两个问题都和arguments有关。arguments是一个特殊的对象👏,它可以存储我们给函数传递的所有参数。只不过它的属性从0开始排,依次为0,1,2…最后还有callee和length属性。我们也把这样的对象称为类数组。

arguments可以让我们在函数里面访问这些参数,不管有多少个,也不管有没有名字。arguments就像一个收纳盒,可以装下所有的参数📦

常见的类数组还有:

  • getElementByTagName 获得的 HTMLCollection
  • querySlector获得的nodeList

它们和数组长得很像,但是不能用数组的方法,比如push或pop。类数组就像一个假冒的数组,长得像但是不能用数组的方法😅

所以,它和数组的性质是完全不一样的呢❗️

❓ 既然不是数组,那我怎么样去操作它呢?

既然是类数组,那我们只要把它们转化成数组格式,即可使用操作数组的技巧使用它们了!

如果用这种思路的话,那就好办了,其实有几种常见的方法可以转化这种类数组对象。

方法一:Array.prototype.slice.call()

利用slice方法可以从一个类数组对象中返回一个新的数组。我们只需要把类数组对象作为call方法的第一个参数传入,就可以得到一个真正的数组。

function sum(a, b) {
   
  let args = Array.prototype.slice.call(arguments);
  console.log(args.reduce((sum, cur) => sum + cur));//args可以调用数组原生的方法啦
}
sum(1, 2);//3

方法二:Array.from()

这个方法是ES6新增的一个方法,它可以把一个类数组对象或者可迭代对象转换成一个新的数组。我们只需要把类数组对象作为参数传入,就可以得到一个真正的数组。

function sum(a, b) {
   
  let args = Array.from(arguments);
  console.log(args.reduce((sum, cur) => sum + cur));//args可以调用数组原生的方法啦
}
sum(1, 2);//3

这种方法也可以用来转换Set和Map哦!👏

方法三:ES6展开运算符

这个方法也是ES6新增的一个语法糖,它可以把一个类数组对象或者可迭代对象展开成一个新的数组。我们只需要在类数组对象前面加上三个点(…),就可以得到一个真正的数组。看看下面的例子:

function sum(a, b) {
   
  let args = [...arguments];
  console.log(args.reduce((sum, cur) => sum + cur));//args可以调用数组原生的方法啦
}
sum(1, 2);//3

展开运算符不仅可以用在函数参数里,还可以用在其他地方,比如合并两个数组或者复制一个数组。😎

方法四:利用concat+apply

利用concat方法可以把两个数组拼接成一个新的数组,和apply方法可以把第二个参数展开,就像把一个鸡蛋打碎一样🥚。我们只需要把一个空数组和类数组对象作为apply方法的参数传入,就可以得到一个真正的数组。看看下面的例子:

function sum(a, b) {
   
  let args = Array.prototype.concat.apply([], arguments);//apply方法会把第二个参数展开
  console.log(args.reduce((sum, cur) => sum + cur));//args可以调用数组原生的方法啦
}
sum(1, 2);//3

方法五:直接暴力循环

最原始的方法就是再创建一个数组,用for循环把类数组的每个属性值放在里面,过于简单,就不浪费篇幅了😜


🎉 你觉得怎么样?这篇文章可以给你带来帮助吗?如果你有任何疑问或者想进一步讨论相关话题,请随时发表评论分享您的想法,让其他人从中受益。🚀✨

目录
相关文章
|
2月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
36 2
|
2月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
28 3
|
2月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
43 4
|
2月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
47 1
|
2月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
27 5
|
2月前
|
JavaScript 前端开发 索引
探索JavaScript数组:基础
探索JavaScript数组:基础
19 3
|
2月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
52 1
|
2月前
|
JavaScript 前端开发
如何在JS中声明一个数组
如何在JS中声明一个数组
28 0
|
2月前
|
存储 JavaScript 前端开发
JavaScript Array(数组) 对象
JavaScript Array(数组) 对象
28 3
|
3月前
|
JavaScript 前端开发
js删除数组最后一个元素
js删除数组最后一个元素