0

我在 chrome 控制台中输入了以下内容:

> Array.prototype.slice.call([1,2], 0)
[1, 2]

> Array.prototype.slice.call([1,2], 1)
[2]

为什么第一次调用不返回 1?

4

5 回答 5

2

带有一个参数的切片从您在参数中给出的索引位置返回数组。在您的情况下,0 标记索引位置 0,因此它返回整个数组。

Array.prototype.slice.call([1,2,3,4,5], 0) 
  //=> [1,2,3,4,5] because index to start is 0
Array.prototype.slice.call([1,2,3,4,5], 2) 
  //=> [3,4,5] because index to start is 2

第二个参数是它从索引开始切出多少元素,所以:

Array.prototype.slice.call([1,2,3,4,5], 0, 1) 
  //=> [1] because index to start is 0 and number of elements to slice is 1
Array.prototype.slice.call([1,2,3,4,5], 2, 2) 
  //=> [3,4] because index to start is 2 and number of elements to slice is 2

在此处的文档中查找更多信息

于 2012-07-11T06:26:36.760 回答
2

Array.prototype.slice.call([1,2], 0)返回从索引 0 开始的数组的所有元素,并将整个元素放入数组中。

Array.prototype.slice.call([1,2], 1)返回从索引 1 开始的数组的所有元素,并将整个元素放入数组中,但是这次它只找到 1 个元素,即2.

于 2012-07-11T06:26:49.863 回答
1

如此处所示,该slice方法接受开始偏移量和可选的结束偏移量,而不是要切片的元素的索引。如果没有提供偏移量,它将切片到数组的末尾。

在您的第一个示例中,slice从元素 0 开始,而在第二个示例中,它从元素 1 开始。在这两种情况下,它都会在该索引处及之后找到任何元素,因为您没有指定偏移量。

于 2012-07-11T06:25:40.370 回答
1

slice 的第一个参数是数组中的起始索引(从零开始计数)。第二个参数(在您的任何一个示例中都没有给出)是结束。准确地说是:超过包容性结束指数。无论如何,它默认为数组的末尾,这是您看到的行为。

Array.prototype.slice.call([1,2], 0, 1)

应该给你[1]

于 2012-07-11T06:26:24.147 回答
0

slice.call(参数,Fromindex);

Fromindex 意味着将参数列表从索引切到末尾。

根据您的情况,从索引 1 切片参数

这就是为什么你得到 [2]

于 2012-07-11T06:28:20.403 回答