令人费解的javascript行为

时间:2012-07-11 06:22:04

标签: javascript

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

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

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

为什么第一个电话不会返回1?

5 个答案:

答案 0 :(得分: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

Find more in the documentation here

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

在您的第一个示例中,slice从元素0开始,而在第二个示例中,它从元素1开始。在两个场景中,它将在该索引处及之后找到的任何元素,因为您尚未指定抵消。

答案 3 :(得分:1)

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

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

应该给你[1]

答案 4 :(得分:0)

slice.call(arguments,Fromindex);

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

视你的情况而定 从索引1

切片参数

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