当我发现这个时,我正在研究jQuery源代码(v1.5第2295行):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
我的问题是,为什么在这里使用slice(0)
?
答案 0 :(得分:100)
sort()
修改了它所调用的数组 - 并且绕过其他代码可能依赖的变异内容并不是很好。
slice()
总是返回一个新数组 - slice(0)
返回的数组与输入相同,这基本上意味着它是一种复制数组的便宜方法。
答案 1 :(得分:29)
arr.slice(0)
通过从索引0处的元素到最后一个元素获取切片来制作原始数组的副本。
它还用于将类似数组的对象转换为数组。例如,DOM NodeList
(由几个DOM方法返回,如getElementsByTagName
)不是数组,但它是一个类似于数组的对象,具有length
字段,并且在JavaScript中是可索引的。要将其转换为数组,通常使用:
var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
答案 2 :(得分:3)
slice(0)创建一个与原始数组相同的新数组。很多时候,您希望保留原始阵列并创建新阵列。
如果使用slice(1),它将从索引位置1开始创建一个不同的数组。
类似的东西也适用于字符串。
答案 3 :(得分:0)
slice(0)
允许您返回您引用的现有数组的数组,在本例中为名称空间。
答案 4 :(得分:0)
除了@Anon所说的:
slice()
方法选择从给定的起始参数开始的元素,并以给定的结束参数结束但不包括。
例1:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3);
柑橘的结果将是:
Orange,Lemon
例2:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(-3, -1);
柑橘的结果将是:
Lemon,Apple
可以找到更多信息here。