[] .slice究竟做了什么

时间:2015-06-29 03:09:07

标签: javascript

我多次看到以下表达式:

var args = [].slice.call(arguments, 0);

[].slice.call([1,2,3,4,5], 0)正是[1,2,3,4,5]

并不只是说

var args = arguments

那么[].slice究竟做了什么?

1 个答案:

答案 0 :(得分:3)

slice是一个从数组中提取子数组的数组方法:

  

slice方法有两个参数, start end ,并返回   包含元素 start 的数组元素的数组   到,但不包括元素 end (或通过数组的末尾   如果 end 未定义)。

例如:

[0,1,2,3,4].slice(2);   // [2,3,4]
[0,1,2,3,4].slice(-2);  // [3,4]
[0,1,2,3,4].slice(2,4); // [2,3]
[0,1,2,3,4].slice();    // [0,1,2,3,4]

具体来说,slice()slice(0)都会生成数组的副本。然后,您将能够在不影响原件的情况下更改副本,反之亦然。

另外,它也可以用于类似数组的对象:

  

slice函数是故意通用的;它不需要   它的 this 值是一个Array对象。因此可以转移到   其他种类的物体用作方法。

因此,它通常用于从类似数组的对象构建一个真实的数组:

[].slice.call({0:0, 1:1, 2:2, length:3}); // [0,1,2]

注意ECMAScript 6中不再需要这个技巧,因为你可以使用Array.from

Array.from({0:0, 1:1, 2:2, length:3}); // [0,1,2]

拥有一个真正的数组而不是类似数组的对象的优点是你可以对它们使用数组方法。