在数组上使用.slice方法

时间:2014-04-24 03:32:37

标签: javascript slice

我正在练习JavaScript Koan的数组部分,而我并不完全理解为什么这些答案是正确的。我在下面添加了我的假设,如果有人可以澄清/让我知道我是否错了:

  it("should slice arrays", function () {
    var array = ["peanut", "butter", "and", "jelly"];

    expect(array.slice(3, 0)).toEqual([]);       
  

为什么它至少不会切片"果冻"因为切片开始于   3? 0的截止如何使它变空?

    expect(array.slice(3, 100)).toEqual(["jelly"]);  
  

如果截止索引超出阵列中当前存在的范围,   这是否意味着从切片创建的新数组将包含所有数组   索引从3开始直到数组结束?

    expect(array.slice(5, 1)).toEqual([undefined];  
  

如果起始索引不存在,它是否总是未定义的   阵列

  });

1 个答案:

答案 0 :(得分:1)

Array.slice()的第二个参数是切片的上限。

将其视为array.slice(lowestIndex, highestIndex)

当您从索引3切换到索引100时,有一个项目(在您的情况下)具有索引> = 3和< 100,所以你得到一个项目的数组。当您尝试从索引3到索引0进行切片时,不能满足条件索引> = 3和< 0,所以你得到一个空数组。

- 编辑 -

此外,array.slice()永远不应返回undefined。这是使用它的一个优点。如果数组中没有匹配的值,则只返回一个空数组。即使你说var a = new Array()并且没有添加任何值,调用a.slice(0,1)也只会给你一个空数组。从数组边界外部切片也将返回一个空数组。 <{1}}将返回a.slice(250),而[]将未定义。