对Array.prototype.slice.call(arguments) 的认识
2015-12-08 18:28
429 查看
因为函数内部的arguments是伪数组,为了将其转化为真正的数组,经常看到的方法是 Array.prototype.slice.call(arguments)。
someArray.slice(start,end)方法用于从数组中截取子数组,如果someArray.slice()中不传入参数,则返回someArray的一个拷贝。
可猜想Array.prototype.slice方法的内部实现原理如下:
以上代码未对数据进行有效性验证。
可猜想slice方法可将符合结构{0:ele1,1:ele2,2:ele3,length:num}的对象转化为数组,实验代码如下:
控制台输出["value0", "value1", "value2"]
因为arguments具有length属性,并且能够通过数字下标的方式获取参数,所以能通过Array.prototype.slice.call(arguments)方法转化为数组。
someArray.slice(start,end)方法用于从数组中截取子数组,如果someArray.slice()中不传入参数,则返回someArray的一个拷贝。
可猜想Array.prototype.slice方法的内部实现原理如下:
Array.prototype.slice = function(start,end){ var temp = new Array(); if(arguments.length == 0){ start = 0; end = this.length; }else if(arguments.length ==1){ end = this.length; } for(var i=0,len=this.length;i<len;i++){ if(i>=start && i<end){ temp[i] = this[i]; } } return temp; }
以上代码未对数据进行有效性验证。
可猜想slice方法可将符合结构{0:ele1,1:ele2,2:ele3,length:num}的对象转化为数组,实验代码如下:
var obj = {0:"value0",1:"value1",2:"value2",length:3}; var objArr = Array.prototype.slice.call(obj); console.log(objArr);
控制台输出["value0", "value1", "value2"]
因为arguments具有length属性,并且能够通过数字下标的方式获取参数,所以能通过Array.prototype.slice.call(arguments)方法转化为数组。
相关文章推荐
- 【python游戏编程之旅】第七篇---pygame中的冲突检测技术
- 工作之经验之谈2
- 挂载和卸载u盘(centos)
- Spring注解详解
- 小红书欢迎引导第二版---欢迎页XhsEmoticonsKeyboard----StickyHeaderViewPager--StickHeaderLayout
- AD多元密码策略
- Data Vault初探(四) —— 初始装载
- Redis入门很简单之六【Jedis常见操作】
- java 嵌入式的Web服务器jetty使用例子
- android内存管理(一)
- swift 创建UICollectionView
- 缓冲区溢出分析第09课:MS06-040漏洞研究——深入挖掘
- 求1+2!+3!+...+20!的和
- 简单分析Java线程编程中ThreadLocal类的使用
- 物理学家:用数学理论证明人工智能无法超越人类智慧
- redis学习笔记-关于redis服务器的理解
- AD权限委派
- Mysql COUNT(*) on multiple tables
- 21、ASP.NET MVC入门到精通——ASP.NET MVC4优化
- 高级安全Windows防火墙