我在研究 jQuery 的源代码时,发现了以下内容(v1.5 行 2295):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
我的问题是,为什么在这里使用 slice(0)
?
我在研究 jQuery 的源代码时,发现了以下内容(v1.5 行 2295):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
我的问题是,为什么在这里使用 slice(0)
?
sort()
会修改调用它的数组 - 这样做可能会影响其他代码依赖的变量,所以不太好。
slice()
总是返回一个新数组 - slice(0)
返回的数组与输入的数组相同,这基本上意味着它是一个廉价的复制数组的方法。
arr.slice(0)
取自从索引位置0到最后一个元素的数组片段,用于复制原始数组。
它还可用于将类数组对象转换为数组。例如,DOM NodeList
(由多个DOM方法如getElementsByTagName
返回)不是一个数组,而是一个类数组对象,并带有JavaScript中的length
字段和可索引属性。要将其转换为数组,通常使用以下方法:
var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
现在,ES2015的扩展语法用于将可迭代对象(包括NodeList
和HTMLCollection
)转换为数组:
const anchorArray = [...document.getElementsByTagName('a')]
const nav = Array.prototype.slice.call(document.querySelectorAll('.nav'), 0);
为什么使用Array.prototype比[]更好? - kchetanslice(0)
创建与原始数组完全相同的新数组。许多时候,您希望保留原始数组并创建一个新数组。
如果使用 slice(1)
,它将创建一个从索引位置 1 开始不同的新数组。
对于字符串也是类似的。
slice(0)
允许你返回一个已存在的数组,即命名空间数组。
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
更多信息可以在这里找到。
["Lemon", "Apple"]
。我们都知道slice()
的作用。Stackoverflow不是为了重复文档内容。问题是关于slice(0)
的意义。在这个上下文中,你的问题根本没有回答到这一点。 - zfj3ub94rf576hc4eegm