2014-04-24 22 views
0

我在練習JavaScript的數組部分Koan,我不完全理解爲什麼這些答案是正確的。我在下面,如果有人可以請澄清我的假設/讓我知道,如果我錯了:在數組上使用.slice方法

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

的第二個參數是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)只會給你一個空數組。從數組邊界外切片也會返回一個空數組。 a.slice(250)將返回[]a[250]將是未定義的。

+0

謝謝,我明白了! – RAgod