arguments 对象特性

一、argumens伪数组

1.arguments对象是函数的内置属性,本身是一个伪数组

  JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性,(与this一样,都是内置属性)。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。arguments是一个伪数组,因此可以进行遍历,并且有length属性。例如我们要求多个数之和时,就可以用到arguments:

function sum(){
  let sum;
  for(let i = 0; i<arguments.length;i++){
    sum += arguments[i];
  }
  return sum
}

  注意:arguments只是伪数组,并不是真正的数组,因此不能调用数组的方法。但可以使用call调用数组的slice方法,将arguments对象转为数组 

var arr = new Array(1,2,3,4,5);
arr.forEach( (val)=>{...})
arguments.forEach( (val)=>{...}) //报错

function test(){
  var arr = Array.prototype.slice.call(arguments);
  return arr.reverse();
}
alert(test(1,2,3,4));

 

2.arguments的callee属性

callee属性的含义是表示对当前函数对象的引用。利于这个属性可以实现无名函数的递归或者保证函数的封装性。

 var sum=function(n){
    if(1==n) {
       return 1;
    } else {
       return n + arguments.callee(n-1);
     }
  }
alert(sum(100));

 

二、rest参数

  ES6中的rest参数与argument是伪数组作用相类似,都可以用来存储所以传入的实参,形式为(...变量名),不同的是该变量名是一个数组。同样还是多个数字求和:

function sum(...values){
  let sum;
  for(var val of values){
    sum += val;
  }
  return sum;
}

  此外还要注意rest参数之后不能再有其他参数即function f(a,...b,c)就会报错

注意:箭头函数中不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。


 

总结:

arguments对象的特性:

  1. arguments对象是函数的内置属性,对象中存储了传递的所有实参;
  2. arguments对象是一个伪数组,可以实现for的遍历,有length属性;但是不能使用数组的方法
  3. 想要实现数组的方法可以用 Array.prototype.slice.call(arguments);将其变成数组
  4. arguments的callee属性表示对当前函数的引用,可以实现匿名函数的递归
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 ES6 中的扩展运算符将 arguments 对象转换为数组。示例如下: ``` function myFunction() { const args = [...arguments]; console.log(args); } myFunction(1, 2, 3); // 输出 [1, 2, 3] ``` 除此之外,也可以使用 Array.from() 方法将 arguments 对象转换为数组。示例如下: ``` function myFunction() { const args = Array.from(arguments); console.log(args); } myFunction(1, 2, 3); // 输出 [1, 2, 3] ``` ### 回答2: JavaScript中的arguments对象是一个类数组对象,它包含所有传递给函数的参数。在特定的情况下,我们可能需要将arguments对象转换为一个真正的数组。幸运的是,有几种方法可以实现这个目标。 第一种方法是使用Array.from()方法。Array.from()可以从类数组对象或可迭代对象中创建一个新的数组实例。我们可以简单地将arguments对象作为参数传递给Array.from(),并将返回的数组保存在一个变量中。 ```javascript function convertArgumentsToArray() { var argsArray = Array.from(arguments); // 现在,argsArray就是arguments对象的数组表示形式 } ``` 第二种方法是使用Array.prototype.slice.call()方法。这个方法利用了Array.prototype.slice()方法的特性,它可以从数组或类数组对象中返回一个新的数组副本。我们可以利用.call()方法将arguments对象作为一个参数传递给Array.prototype.slice(),并将返回的数组保存在一个变量中。 ```javascript function convertArgumentsToArray() { var argsArray = Array.prototype.slice.call(arguments); // 现在,argsArray就是arguments对象的数组表示形式 } ``` 无论使用哪种方法,我们都可以将arguments对象转换为一个真正的数组,方便我们对参数进行数组操作,如遍历、过滤、映射等。这样可以提高代码的可读性和维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值