slice
定义
slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
语法
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 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。
例子
var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];
var citrus = fruits.slice(1, 3);
// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus contains ['Orange','Lemon']一个常见应用
很多时候会看见这样的的代码
[xxx].slice()这样可以拷贝生成一个新数组
另一个常见应用
let args = [].slice.call(arguments, 1)首先slice 返回里一个函数,[] 只是起到这是Array的一个实例对象 而已,也就是说[].slice 等于Array.prototype.slice
至于call 函数,再温习一遍。这是Javascript比较魔法的地方,不同对象之间可以借用方法运行。实例
object1 = {
name:'frank',
greet:function(){
alert('hello '+this.name)
}
};
object2 = {
name:'andy'
};
// Note that object2 has no greet method.
// But we may "borrow" from object1:
object1.greet.call(object2); // will show an alert with 'hello andy'因此,这里就比较明显了。传入的arguments 从索引1到结尾的数据范围赋值给了args
最后更新于
这有帮助吗?