假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢?

这个语法其实不难理解,只是它有些不好看。Array 是 JavaScript 的基本类型,你可以使用 Array.prototype 获取它的属性值,在这里我假设你已经了解了 prototype 的概念。

slice 是 JavaScript 的一个方法,用于选取一个数组的一部分数据,并返回一个新的数组。它可以接收两个参数,startIndex(必选)和 endIndex。因此:

var a = ["a", "b", "c"];
a.slice(1,2); 

将返回数组 ["b"],它包含 a 数组从 1 到 2 之间元素。而:

var a = ["a", "b", "c"];
a.slice(1); 

则会返回数组 [“b”, “c”],它包含 a 数组从 1 到最后一个元素之间元素。

这里的 a 是个数组,那么变量 arguments 呢?

众所周知,当你调用 JavaScript 的函数的时候,会创建一个隐藏的名为 arguments 的参数,你是不是觉得它就是一个数组呢?答案是否定的,它是一个对象,但是与数组类似。

function f () {return arguments; } f("1", "2") instanceof Array; 

这里,你会得到 FALSE 的结果,就是说我们不能像平常一样使用 Array 的函数,例如:push,pop,slice等等这些。但是我想使用这些方法,应该怎么办呢?

我们可以使用 Array.prototype.slice.apply(arguments) 对参数进行转换为真正的 Array。这里我们使用了 JavaScript 的 apply 方法,通过这个方法可以更好的了解 JavaScript 中调用函数的另一种方法。该方法将 slice 应用到第一个参数 arguments 中,并返回一个数组。

Array.prototype.slice.apply(f("1", "2")) instanceof Array; 

现在可以看到这里返回 TRUE 的结果!!

PS:在 ECMAScript5 中,我们只需要直接调用 arguments.slice() 即可。

转载于:https://www.cnblogs.com/chris-oil/p/7692341.html

[转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)相关推荐

  1. Array.prototype.slice.apply(arguments)和[].slice.apply(arguments)解析

    我们知道,函数内部 arguments 是一个类数组对象,不是真正的数组,因此也无法使用数组的各种方法.想详细了解 argument 对象可以前往函数中的 arguments. (function f ...

  2. 理解 Array.prototype.slice.apply

    1. 首先,我们都理解在js中改变this引用有三种方法,call(), apply(), bind(): 2. bind方法是改变函数内this引用,简单不再描述; 3. 至于 call() 和 a ...

  3. js Array.prototype.slice.call(arguments,0) 理解

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  4. [转载]Array.prototype.slice.call(arguments,1)原理

    Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...

  5. Array.prototype.slice.call(arguments)

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与co ...

  6. 详解 Array.prototype.slice.call(arguments)

    首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...

  7. Array.prototype.slice.call(arguments,0); 上下调用模型

    var fn9 = (function () {var arr = {}; //缓存对象var counter = function (arr) { //计算函数//args也就是fn9(1, 2, ...

  8. Array.prototype.slice.call(arguments)对象转成数组

    转成数组的通用函数 1 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ ...

  9. slice,Array.prototype.slice,Array.protyotype.slice.call

    slice 特点:基于当前数组中的一或多个项创建一个新数组.[原数组不会被修改] 返回结果:返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象. 语法: arr.slice() ...

最新文章

  1. 学习BeetlSQL总结(2)——查询API,更新API
  2. npm包实现发布正式和测试版
  3. Java集合HashSet
  4. 弱口令的分析和爆破工具使用
  5. 数学建模:马王堆一号入墓年代的测定问题
  6. Drawing绘图halcon算子,持续更新
  7. swoole_event_add实现异步
  8. 谷歌中国 AI 中心要凉?李飞飞否认将离职
  9. VB中连接access数据库的几种方法
  10. 毕业两年程序员Java学习路线
  11. IntelliJ IDEA自带接口测试工具
  12. 嵌入式Linux:V3s移植NES游戏,声音,游戏手柄
  13. Windows 2003安装和配置活动目录服务
  14. 图片太大加载不出来的解决方法
  15. 终于明白MSN “I'm” 图标啥意思了
  16. python 人像素描_谁说程序员不懂浪漫的,直接用 Python 给女朋友画张素描
  17. 用python爬取公众号推送图片并保存为PPT
  18. 求空间中点到线的最短距离(Revit二次开发)
  19. 中国软件行业待遇问题
  20. 安装tomcat后运行Tomcat8.exe一闪而逝解决方案

热门文章

  1. cad怎么卸载干净_CAD无法卸载,又无法安装怎么办?
  2. MySQL快速上手[学习笔记](一)
  3. 盘点下常用的接口测试工具,有几个你肯定没用过
  4. 山东女子学院计算机专业分数线,山东女子学院2020年山东省本科专业录取分数统计(含位次)...
  5. Latex中将多个eps图片合并成一幅eps的代码和方法
  6. iphone已停用怎么解锁_iPhone多次输错密码已停用,连接iTunes,怎么办?
  7. linux嵌入式工作室,【课程培训】嵌入式linux驱动开发系列教程 | linux2web工作室...
  8. 基于图像的小麦真菌病害深度学习识别(数据+平台)
  9. 基于预训练深度学习算法的番茄作物病害分类
  10. [Java]toString的用法