Array.prototype.push.apply与Array.prototype.slice.call

Array.prototype.push.apply与Array.prototype.slice.call

  • 首先这都是常用来合并两个数组的方法

先来分析

  • Array.prototype.push.apply
  let a = [1,2,3]
  let b = [3,4,5]
    // 调用Array 原型中的方法push,大部分的数组方法都写在原型上
    console.log(Array)
    // 使用apply 改变调用push时this的指向,而apply 之后的参数必须是数组形式的[3,4,5]
    // Array.prototype.push.apply(a,b)  // 这就将b合并到了a中了
    // 也可以这样写
    a.push.apply(a,b)
// 结果都是 a [1,2,3,4,5,6]

这样写等价于 a.push.apply(a,b)

  • Array.prototype.concat()
    concat不会改变原数组,concat会返回新数组,而上面apply这种写法直接改变数组a。

  • Array.prototype.slice.call(arguments)
    MDN解释slice方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组。你只需将该方法绑定到这个对象上。
    obj.prototype.slice = Array.prototype.slice

  • Object.prototype.toString.call()
    用来精确的判断一个变量是什么类型

    let str = []
    console.log(typeof str)  // object

    let type = Object.prototype.toString.call(str)  // 用来精确的判断一个变量是什么类型
    console.log(type)  // [Object Array]

其他类似的写法

  • Object.prototype.hasOwnProperty.call(object,prop)

类似还有这样的写法,这样写是因为js没有保护hasOwnProperty 属性名,hasOwnProperty 有可能被修改为其他方法,所以这样写可以调用到原生的Objext原型上的hasOwnProperty 方法。这样写等价于({}).hasOwnProperty.call(object,prop)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值