Javascript 在数组上使用.slice方法

Javascript 在数组上使用.slice方法,javascript,slice,Javascript,Slice,我正在练习JavaScript Koan的数组部分,我不完全理解为什么这些答案是正确的。如果有人能澄清/让我知道我是否错了,我在下面添加了我的假设: it("should slice arrays", function () { var array = ["peanut", "butter", "and", "jelly"]; expect(array.slice(3, 0)).toEqual([]); 既然“果冻”一片的开头是“果冻”,为什么它不至少切一片

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

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

    expect(array.slice(3, 0)).toEqual([]);       
既然“果冻”一片的开头是“果冻”,为什么它不至少切一片呢 3.0的截止值如何使其变为空

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

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

第二个参数是切片的上限

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

当您从索引3切片到索引100时,有一个项目(在您的例子中)的索引大于等于3且小于100,因此您将得到一个包含该项目的数组。当您尝试从索引3到索引0取一个切片时,不可能有任何项满足索引>=3和<0的条件,因此您将得到一个空数组

--编辑--


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

谢谢,我现在明白了!
    expect(array.slice(3, 100)).toEqual(["jelly"]);  
    expect(array.slice(5, 1)).toEqual([undefined];  
  });