JS之函数实际参数转换成数组的方法[].slice.call(arguments)
实际参数在函数中我们可以使用 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()
方法在其原型对象中,而[]
就是Arra
y的原型对象,在控制台中输入 Array.prototype
,结果是[]
,所以第一段代码可以顺利执行。
第二段代码如下修改就可以了:
function argToArr(){return Array.prototype.slice.call(arguments, 0); // 改这一行 } console.log(argToArr(1,2,3));
JS之函数实际参数转换成数组的方法[].slice.call(arguments)相关推荐
- js如何把字符串转成数组对象
js如何把字符串转成数组对象 //数据格式如下: list: [{radio: "",formInline: "1,2,3,4", //对此字符串做处理},{r ...
- javascript 中 split 函数分割字符串成数组
分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...
- php 1 2 3 转arry_在PHP语言中使用JSON和将json还原成数组的方法
在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考.内容如下 从5.2版本开始,PHP原生提供json_encode()和json_deco ...
- php把对象转换成数组,php对象转换成数组的方法
php对象转换成数组的方法 发布时间:2020-05-20 14:13:07 来源:亿速云 阅读:108 作者:鸽子 php对象转数组方法 在php中将对象转数组的方法,可以通过使用"get ...
- 将类数组转换成数组的方法
类数组的概念: 类数组(ArrayLike)是指:和"数组"类似,有length属性,并且可以通过下标进行访问内部的元素且在写法上跟数组一样,但是不能直接使用数组方法.比如argu ...
- 将字符串转成数组的方法
// 遍历字符串 let str = 'hello' for (let i of str) {console.log(i); } // 将字符串转成数组 // split() 方法用于把一个字符串分割 ...
- 如何将函数的实际参数转换成数组
转自:http://www.planabc.net/2010/01/06/arguments_to_array/ 实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 argu ...
- 浅谈集合转换成数组的方法--toArray()与toArray(T[] a)
众所周知,ArrayList 集合的底层是通过数组来实现的,但是集合与数组还是有一些区别的,简单来说,集合的长度是可变的,而数组的长度是不可变的,通过这点可以引发出一点效率上的差异,当所处理的数据长度 ...
- js 数组按奇偶拆分_js中通过split函数分割字符串成数组小例子
str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); ...
最新文章
- 2015年度互联网安全报告发布 移动支付成重灾区
- 几种常用的Java数据源解决方案
- 一篇漫画,看懂云计算!
- linux编译mesa,如何在Ubuntu 16.04,17.10中安装Mesa 17.3.3
- (39)FPGA面试技能提升篇(nandflash接口)
- 荣耀20首现身!“保密壳”却暴露双排摄像头
- 【注意】LeetCode 2. Add Two Numbers
- 《人生七年》启示,穷人买车,富人投资教育
- c语言关键字及其含义,C语言关键字解析
- Eplan 2.7 ”没有可用加密狗“问题
- python文件管理api_python调用有道智云API实现文件批量翻译
- Marlin固件配置
- 网课答案查题方法详细步骤
- 无码科技发布第一款产品:Readhub
- Windows安装Apache(解决问题Set the 'ServerName' directive globally to suppress this message)
- 免费直播 | Three.js 实现粒子雷雨特效,走入前端 3D 世界!
- 元学习——通过知识迁移的图小样本学习(Graph Few-shot Learning via Knowledge Transfer)
- r720换固态硬盘后如何重装系统_电脑安装完固态硬盘后如何重装系统?
- 动力电池用复合相变材料:国内外导热和储能性能测试中存在的问题
- postgis基本用法