什么是.slice(0)在这里?

mVC*_*Chr 65 javascript jquery type-conversion slice

当我发现这个时,我正在研究jQuery源代码(v1.5第2295行):

namespace = new RegExp("(^|\\.)" +
  jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么要slice(0)在这里使用?

Ano*_*on. 104

sort() 修改它所调用的数组 - 并且绕过其他代码可能依赖的变异内容并不是很好.

slice()总是返回一个新数组 - 返回的数组slice(0)与输入相同,这基本上意味着它是一种复制数组的廉价方法.

  • @ide答案更精确:"还用于将类似数组的对象转换为数组" (2认同)

ide*_*ide 30

arr.slice(0) 通过从索引0处的元素到最后一个元素获取切片来生成原始数组的副本.

它还用于将类似数组的对象转换为数组.例如,一个DOM NodeList(由几个DOM方法返回getElementsByTagName)不是一个数组,但它是一个类似于数组的对象,带有一个length字段,并且在JavaScript中是可索引的.要将其转换为数组,通常使用:

var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
Run Code Online (Sandbox Code Playgroud)

  • HTMLCollection.slice未定义,但Array.slice确实存在,因此[] .slice.call业务. (2认同)

小智 5

slice(0)创建一个与原始数组相同的新数组。很多时候您想保留原始数组并创建一个新数组。

如果使用slice(1),它将从索引位置 1 开始创建一个不同的数组。

类似的事情也适用于字符串。