实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组。

我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组。

方法一:通过Array.prototype属性调用slice方法

var args = Array.prototype.slice.call(arguments);

Array 本身是没有 slice 方法,它的方法在 Array.prototype中,而我们在调用 slice 方法的时候,如果在 Array 本身没有找到 slice 方法的话,会通过它的原型链往上查找。

方法二:通过调用[]的slice方法

var args = [].slice.call(arguments);

方法三:通过遍历arguments,返回数组

function toArray(){var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return args;
}

注:一般的函数的 arguments.length 都在 10 以内,方法二有优势; 方法二的代码量上也比第一种少,至少可以减小一点字节

实例:

function revse(){try{return Array.prototype.slice.call(arguments);}catch(e){var newarr=[];for(var i=arguments.length-1;i>=0;i--){ //newarr.push(arguments[i]);newarr[i] = arguments[i]; //这样比push快?
        }return newarr;}
}
var s = revse('a','b','c');
console.log(s); //["a", "b", "c"]

跟arguments问题相关题目

在某些场景下,需要将函数的 arguments 参数作为一个数组调用,但是 arguments 是一个奇异对象,所以试着将 arguments 转化为一个数组,例如下面例子:

function argToArr(){return [].slice.call(arguments, 0);
}
console.log(argToArr(1,2,3));    //[1,2,3]function argToArr(){return Array.slice.call(arguments, 0);
}
console.log(argToArr(1,2,3));    //Uncaught TypeError: Cannot read property 'call' of undefined

这是为什么呢?
第二段代码报错是因为Array是构造函数,不是对象,打开控制台,输入 typeof Array,结果是 function
slice()方法在其原型对象中,而[]就是Array的原型对象,在控制台中输入 Array.prototype,结果是[],所以第一段代码可以顺利执行。

第二段代码如下修改就可以了:

function argToArr(){return Array.prototype.slice.call(arguments, 0); // 改这一行
}
console.log(argToArr(1,2,3)); 

JS之函数实际参数转换成数组的方法[].slice.call(arguments)相关推荐

  1. js如何把字符串转成数组对象

    js如何把字符串转成数组对象 //数据格式如下: list: [{radio: "",formInline: "1,2,3,4", //对此字符串做处理},{r ...

  2. javascript 中 split 函数分割字符串成数组

    分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...

  3. php 1 2 3 转arry_在PHP语言中使用JSON和将json还原成数组的方法

    在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考.内容如下 从5.2版本开始,PHP原生提供json_encode()和json_deco ...

  4. php把对象转换成数组,php对象转换成数组的方法

    php对象转换成数组的方法 发布时间:2020-05-20 14:13:07 来源:亿速云 阅读:108 作者:鸽子 php对象转数组方法 在php中将对象转数组的方法,可以通过使用"get ...

  5. 将类数组转换成数组的方法

    类数组的概念: 类数组(ArrayLike)是指:和"数组"类似,有length属性,并且可以通过下标进行访问内部的元素且在写法上跟数组一样,但是不能直接使用数组方法.比如argu ...

  6. 将字符串转成数组的方法

    // 遍历字符串 let str = 'hello' for (let i of str) {console.log(i); } // 将字符串转成数组 // split() 方法用于把一个字符串分割 ...

  7. 如何将函数的实际参数转换成数组

    转自:http://www.planabc.net/2010/01/06/arguments_to_array/ 实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 argu ...

  8. 浅谈集合转换成数组的方法--toArray()与toArray(T[] a)

    众所周知,ArrayList 集合的底层是通过数组来实现的,但是集合与数组还是有一些区别的,简单来说,集合的长度是可变的,而数组的长度是不可变的,通过这点可以引发出一点效率上的差异,当所处理的数据长度 ...

  9. js 数组按奇偶拆分_js中通过split函数分割字符串成数组小例子

    str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); ...

最新文章

  1. 2015年度互联网安全报告发布 移动支付成重灾区
  2. 几种常用的Java数据源解决方案
  3. 一篇漫画,看懂云计算!
  4. linux编译mesa,如何在Ubuntu 16.04,17.10中安装Mesa 17.3.3
  5. (39)FPGA面试技能提升篇(nandflash接口)
  6. 荣耀20首现身!“保密壳”却暴露双排摄像头
  7. 【注意】LeetCode 2. Add Two Numbers
  8. 《人生七年》启示,穷人买车,富人投资教育
  9. c语言关键字及其含义,C语言关键字解析
  10. Eplan 2.7 ”没有可用加密狗“问题
  11. python文件管理api_python调用有道智云API实现文件批量翻译
  12. Marlin固件配置
  13. 网课答案查题方法详细步骤
  14. 无码科技发布第一款产品:Readhub
  15. Windows安装Apache(解决问题Set the 'ServerName' directive globally to suppress this message)
  16. 免费直播 | Three.js 实现粒子雷雨特效,走入前端 3D 世界!
  17. 元学习——通过知识迁移的图小样本学习(Graph Few-shot Learning via Knowledge Transfer)
  18. r720换固态硬盘后如何重装系统_电脑安装完固态硬盘后如何重装系统?
  19. 动力电池用复合相变材料:国内外导热和储能性能测试中存在的问题
  20. postgis基本用法

热门文章

  1. python如何定义类_python类定义的讲解
  2. SpringBoot启动流程分析(四):IoC容器的初始化过程
  3. ●BZOJ 4408 [Fjoi 2016]神秘数
  4. 解决 Microsoft Excel has stopped working
  5. NSMutableArray
  6. Window7文件共享之法 [转载]
  7. 小氓男-灰色按钮激活V1.0
  8. 我只是一只碌碌无为的工蚁 : (
  9. C#如何判断程序调用的exe已结束
  10. c#中获取控件窗体句柄,获取窗体等的一些操作