Array.prototype.slice.apply的使用方法

 更新时间:2010年03月17日 19:53:19   作者:  
arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数。
复制代码 代码如下:

function test(){ 
 //将参数转为一个数组 
  var args = Array.prototype.slice.apply(arguments); 
 alert(args); 
}

arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数。这个对象很象数组,拥有length属性且使用下标的形式来获取其元素,但它又并非真正的Array对象。更多关于Arguments对象的资料请参阅《JavaScript权威指南》。
  所以,直接调用arguments.slice()将返回一个"Object doesn't support this property or method"错误,因为arguments不是一个真正的数组。而以上代码调用Array.prototype.slice.apply(arguments)的意义就在于它能将函数的参数对象转化为一个真正的数组。JavaScript脚本引擎如何实现我们不得而知,但这种方式确实是有效的,而且在主流浏览器上都测试通过。另一方面也可推知Arguments对象和Array对象的亲缘关系。如果你在编写JavaScript的时候,常常碰到需要将arguments对象转成Array来处理的情形,这个技巧可以帮上忙。 
  这个技巧来自鼎鼎大名的DouglasCrockford。推而广之,Array其他的原型方法也可以应用在arguments上,比如: 
var arg0 = Array.prototype.shift.apply(arguments);
  shift也是Array的一个实例方法,用于获取并返回数组的第一个元素。当然如上的调用虽然可执行,但却纯属多余,不如直接调用arguments[0]来的简单直接。再推而广之,我们也可以对很多形似Array的Collection对象应用这个技巧,比如Array.prototype.slice.apply(document.getElementsByTagName('div')); 不过很遗憾,IE并不支持这样的调用,Firefox和Opera则都能得到正确的结果。 
  Prototype1.4中增加的$A()方法也常用来将arguments转为数组,我们看它的实现: 
复制代码 代码如下:

var $A = Array.from = function(iterable) { 
 if(!iterable) return[]; 
  if(iterable.toArray) { 
  returniterable.toArray(); 
 } else { 
  varresults = []; 
  for(vari=0; i<iterable.length; i++) 
  results.push(iterable[i]); 
  returnresults; 
 } 
}

Prototype用一个for循环来构造新数组,这样是为了保证最大限度的兼容性。

相关文章

  • php,js,css字符串截取的办法集锦

    php,js,css字符串截取的办法集锦

    这篇文章主要介绍了php,js,css字符串截取的办法,其实没有什么技术含量,就是记录一下,方便自己复习巩固,希望对大家能有所帮助
    2014-09-09
  • JavaScript双向链表实现LRU缓存算法的示例代码

    JavaScript双向链表实现LRU缓存算法的示例代码

    本文主要介绍了JavaScript双向链表实现LRU缓存算法的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • JavaScript限定范围拖拽及自定义滚动条应用(3)

    JavaScript限定范围拖拽及自定义滚动条应用(3)

    这篇文章主要介绍了JavaScript限定范围拖拽及自定义滚动条应用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • JavaScript数组类型Array相关的属性与方法详解

    JavaScript数组类型Array相关的属性与方法详解

    这篇文章主要给大家介绍了关于JavaScript数组类型Array相关的属性与方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JavaScript 回车 焦点切换

    JavaScript 回车 焦点切换

    回车键按下时,自动以Tab键方式在文本输入框之间进行焦点切换的JavaScript代码
    2009-06-06
  • 微信小程序顶部可滚动导航效果

    微信小程序顶部可滚动导航效果

    最近领导安排做一个小程序之做头部做导航分类效果,下面小编给大家分享实现代码,需要的朋友参考下吧
    2017-10-10
  • JavaScript简单实现合并两个Json对象的方法示例

    JavaScript简单实现合并两个Json对象的方法示例

    这篇文章主要介绍了JavaScript简单实现合并两个Json对象的方法,结合实例形式分析了json对象的遍历、添加实现合并的相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • JavaScript第七种数据类型Symbol的用法详解

    JavaScript第七种数据类型Symbol的用法详解

    Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值。它是JavaScript中的第七种数据类型。本文将详细讲讲Symbol的使用,需要的可以参考一下
    2022-09-09
  • JavaScript中this机制是如何真正工作的

    JavaScript中this机制是如何真正工作的

    JavaScript中this机制提供了更优雅的方式来隐含地“传递”一个对象引用,导致更加干净的API设计和更容易的复用,this既不是函数自身的引用,也不是函数词法作用域的引用,this实际上是在函数被调用时建立的一个绑定,它指向什么是完全由函数被调用的调用点来决定的
    2023-11-11
  • js实现瀑布流效果(自动生成新的内容)

    js实现瀑布流效果(自动生成新的内容)

    本文主要介绍了js实现瀑布流效果:当滚动条接近底部会自动生成新的内容。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03

最新评论