深入Array.prototype.slice()方法

Array.prototype.slice()方法用于返回数组的一个浅拷贝部分。它创建一个从开始索引到结束索引(不包括)的新数组,不改变原始数组。在处理包含引用类型的数组时,要注意它是浅拷贝,意味着对象引用会被复制,改动引用对象会影响到原数组。
摘要由CSDN通过智能技术生成

"slice"英文是 片 的意思,顾名思义,slice方法是将数组切片,即返回原数组的一部分

slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

   var arr = [4,2,7,0,1,6]
   arr.slice(1,3)   //[2,7]
   arr.slice()      //[4,2,7,0,1,6]
   arr.slice(1)     //[2,7,0,1,6]
   arr.slice(1,10)  //[2,7,0,1,6]
   arr.slice(-2)    //[1,6]
   arr.slice(-3,-1) //[0,1] 

语法:

   arr.slice([begin[, end]])

begin 可选

提取起始处的索引(从 0 开始),从该索引开始提取原数组元素。

如果该参数为负数,则表示从原数组中的倒数第几个元素开始提   取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。

如果省略 begin,则 slice 从索引 0 开始。

如果 begin 大于原数组的长度,则会返回空数组。

end 可选

提取终止处的索引(从 0 开始),在该索引处结束提取原数组元素。slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end)。

slice(1,4) 会提取原数组中从第二个元素开始一直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。

如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

如果 end 被省略,则 slice 会一直提取到原数组末尾。

如果 end 大于数组的长度,slice 也会一直提取到原数组末尾。

返回值

一个含有被提取元素的新数组。


注意:

slice()方法不会改变原数组,

slice()方法是浅拷贝,如果原数组中包含引用类型,那么slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变


   var list = [{ name: "shi", age: 20 },[1, 2, 3], 60]
   
    var arr = list.slice()
    
    list[0].name = "xia"
    
    console.log(arr)   //[{ name: "xia", age: 20 },[1, 2, 3], 60]

Array.prototype.slice()常用之处是用于将实参列表( arguments)转为数组

由于arguments是类数组,不是真正的数组,不能调用数组的方法,所以需要使用Array.prototype.slice.call(arguments)将其转换为数组

    function demo(){
        var arr = Array.prototype.slice.call(arguments)
        console.log(arr)   //[1,2,3,4]
    }
    demo(1,2,3,4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值