我正在练习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];
如果起始索引不存在,它是否总是未定义的 阵列
});
答案 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)
,而[]
将未定义。