将arguments转换成数组的方法

将函数里的arguments,转换成一个真正的数组的方法,arguments是个类数组,除了有实参所组成的类似数组以外,还有自己的属性,如callee,arguments.callee就是当前正在执行的这个函数的引用,它只在函数执行时才存在。因为在函数开始执行时,才会自动创建第一个变量arguments对象。

一、arguments这个类数组

  1. 它将实参以数组的形式保存着,还可以像数组一样访问实参,如arguments[0];
  2. 它也有自己独特的属性,如:callee,
  3. 它的长度是实参的个数。补充:那arguments.callee.length又是什么呢?arguments.callee是当前正在执行的函数的引用,类似function.length,那就是形参的个数。

二、将arguments转换为真正的数组的方法

  1. Array.prototype.slice.apply(arguments)这是运行效率比较快的方法(看别人资料说的),为什么不是数组也可以,因为arguments对象有length属性,而这个方法会根据length属性,返回一个具有length长度的数组。若length属性不为number,则数组长度返回0;所以其他对象只要有length属性也是可以的哟,如对象中有属性0,对应的就是arr[0],即属性为自然数的number就是对应的数组的下标,若该值大于长度,当然要割舍啦。
  2. Array.prototype.concat.apply(thisArg,arguments)。,thisArg是新的空数组,apply方法将函数this指向thisArg,arguments做为类数组传参给apply。根据apply的方法的作用,即将Array.prototype.slice方法在指定的this为thisArg内调用,并将参数传给它。用此方法注意:若数组内有数组,会被拼接成一个数组。原因是apply传参的特性。
  3. 我自己想了个方法,利用Array的构造函数,如Array(1,2,3,4,5,6);可以返回一个传入的参数的数组,那Array.apply(thisArg,arguments)也可以将arguments转化为数组,果然实验是可以的;有没有什么影响呢,就是乱用了构造函数,但这也是js的特性嘛。构造函数也是函数。用此方法注意:若数组内有数组,会被拼接成一个数组。原因是apply传参的特性。
  4. 用循环,因为arguments类似数组可以使用arguments[0]来访问实参,那么将每项赋值给新的数组每项,直接复制比push要快,若实参有函数或者对象,就要深拷贝。

三、综上所述,最完美的方法应该是Array.prototype.slice.apply(arguments)了

时间: 2024-07-30 09:50:17

将arguments转换成数组的方法的相关文章

php最简单把xml转换成数组的方法

$xml= $this->getToken($url); $rs =simplexml_load_string (urldecode( $xml) ) ; $rs = json_decode( json_encode($rs) , true); json相关编码问题:http://www.nowamagic.net/php/php_JsonDecode.php

将伪数组转换成数组

这里把符合以下条件的对象称为伪数组: 1,具有length属性 2,按索引方式存储数据 3,不具有数组的push,pop等方法 如 1,function内的arguments . 2,通过document.forms,Form.elements,Select.options,document.getElementsByName() ,document.getElementsByTagName() ,childNodes/children等方式获取的集合(HTMLCollection,NodeLi

XML转换成数组方法

<?php function xmlToArray2($xml) { // 将XML转为array $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition

将函数的实际参数转换成数组的方法

实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组.arguments本身不是一个数组,可以说是有length属性的一个对象(类数组对象),所以需要将其变通,改造成一个数组. 我们可以通过slice 方法将 arguments 对象转换成真正的数组.首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第

求平均数-----类数组转换成数组

求平均数的代码function avgFn() { 首先把arguments转化为数组 var ary = []; for (var i = 0; i < arguments.length; i++) { ary.push(arguments[i]); ary[ary.length] = arguments[i]; } 数组排序 ary.sort(function (a, b) { return a - b; }); 掐头去尾 ary.unshift(); ary.pop(); 求和求平均值,小

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

【考点】如何将一个Collection转换成数组?

解析:集合和数组有很多共同的地方,二者都是作为数据容器使用, 用来持有数据.数组的长度是固定的,集合的长度却可以动态扩展,数组由于可以直接通过索引操作其元素,所以性能和效率较高.实际应用中,可能使用及合作为临时变量持有数据,却将处理结果转换成数组返回. 参考答案:Collection接口中定义了toArray(T[] a)方法来将集合转换为数组,其中T是泛型类型.

file_get_contents(&#39;php://input&#39;) 数据如何转换成数组

前台表单页:demo01.html 后台:demo01.php 输出结果: 备注:若前台通过Ajax的post提交过来的是json数据,需要对json数据进行解析:$data = json_decode($postStr,true); file_get_contents('php://input') 的优势: 1, php://input 可以读取http entity body中指定长度的值,由Content-Length指定长度,不管是POST方式或者GET方法提交过来的数据.但是,一般GE

ppt转换成pdf的方法你都会哪些?

摘自百家号:ppt转换成pdf的方法你都会哪些?       在处理客户发来的PPT幻灯片,总想着如果能将其转换成pdf格式就好了,因为ppt文稿是连续的图片构成,翻页浏览不是很方便.那么如何将ppt转换成pdf呢?ppt转换成pdf的方法你都会哪些? 好了,不吊大家胃口了,这里分享三个ppt转换成pdf的方法,大家看下你都会哪些?      一.当您的Office软件本身带有PDF插件,您可以直接选择另存PDF格式文件;(Office 2007及以上版本适用) 二.利用PPT里面本身携带的PD