ES5中的数组方法slice()的底层内部实现及拓展

代码实现如下:

Array.prototype.slice=function(start,end){  //ES5 中的数组方法slice的底层内部实现
    var result = new Array(); //新数组
    var start = start || 0;
    var end = end || this.length; //this指向调用的对象,用了call之后,改变this的指向,指向传进来的对象
    for(var i=start; i<end; i++){
        result.push(this[i]);
    }
    return result;	//返回的为一个新的数组
}

拓展:

slice()方法可以将伪数组转化为真数组,一般用法如下所示:
//此处obj就是伪数组,通过call改变this指向,使其指向obj,slice会返回一个新的数组,就是真数组
var arr = Array.prototype.slice.call(obj)  	
除了slice()方法可以将伪数组转化为真数组之外,以下几种方式也可以将伪数组转化为真数组
  1. 声明一个空数组,通过遍历伪数组将其值重新添加到新的空数组中并返回(一般这种方式不用讲了)
  2. jQuery里的toArray()方法也可以将伪数组转化为真数组,其底层实现实际上使用的是数组的slice方法
  3. ES6中的扩展运算符(…)也可以将某些数据结构转为数组,扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署这个接口,就无法转换。用法如下:
let arr = [...obj]  //此处obj是伪数组
//扩展运算符将伪数组转化为真数组的条件除了伪数组要具有length属性之外,还必须要有内容值存在,否则无法转化
  1. ES6中的新方法from(),任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。用法如下:
let arr = Array.from(obj);  //此处obj就是伪数组
ES6中Array.from()方法拓展:

Array.from()方法除了可以将伪数组转化为真数组之外,还提供了map功能,它可以接收第二个参数,对每个元素进行处理,将处理之后的结果放到返回的新数组当中,具体用法如下:

Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);

Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]

应用场景:

Array.from({ length: 2 }, () => 'jack')
// ['jack', 'jack']

上面代码中,Array.from的第一个参数指定了第二个参数运行的次数。这种特性可以让该方法的用法变得非常灵活。

Array.from()的另一个应用是,将字符串转为数组,然后返回字符串的长度。因为它能正确处理各种 Unicode 字符,可以避免 JavaScript 将大于\uFFFF的 Unicode 字符,算作两个字符的 bug。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值