[].slice.call(arguments)的理解

先放结论:[].slice.call(arguments)能将具有length属性的对象转成数组。

可能大家在看某些代码的时候会发现有这样的代码,[].slice.call(arguments)这代码是什么意思呢,我捉摸了1晚上,现在分别为大家解析一下

[].slice.call(arguments)

这段代码的意思是能够将具有length属性的arguments转换为数组

下面先拆分一下

  1. [] 数组,意思是创建一个空的数组对象
  2. slice() :方法可从已有的数组中返回选定的元素。
  3. 一般将 call 方法用于强制指定 this 的指向
  4. arguments 是属于函数内部的变量,其值是函数参数列表,一个类数组对象,是具有长度属性的,却并不是数组,不具备slice()这个方法,那就意味着 arguments.slice()行不通

从上面列表看出了已经区分了4个意思,下面先贴代码

function array() {
  var _args = [].slice.call(arguments)// 将具有length属性的对象转换成数组
  console.log(_args)
}

array()


/**
 * 输出转换后的对象: []
 */

首先定义一个名为array的函数方法,在里面定义一个转换方法,arguments指向当前函数array的作用域,也就是方法内部,这个时候调用函数时是没有传递参数的,所以返回一个空数组,那么如果传递值呢?又是什么样子?

function array() {
  var _args = [].slice.call(arguments)// 将具有length属性的对象转换成数组
  console.log('输出转换后的对象:', _args)
}

array(5, 6, 7, 8, 9)

/**
 * 输出转换后的对象: [ 5, 6, 7, 8, 9 ]
 */

 可以看到,我传递的是一个一个参数,为什么却被转换成数组了呢? 大家仔细看:

 通过[]创建一个空数组,通过slice方法从已有的数组中返回选定的元素。

然后他通过call()方法强制指定当前函数方法内部变量arguments,返回了函数参数列表,这个时候slice()方法将其解析,因为没有给slice参数startend,所以直接返回从0到最后一个位置的所有参数,将这些参数内部push到[]这个创建好的空数组中,这样子就返回了一个数组元素!

slice()参数:

以上就是我对[].slice.call(arguments)的个人理解

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值