繁体   English   中英

.slice(0) 在这里有什么意义?

[英]What's the point of .slice(0) here?

当我发现这个时,我正在研究 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 (由getElementsByTagName等几个 DOM 方法返回)不是一个数组,但它是一个具有length字段的类数组对象,并且在 JavaScript 中是可索引的。 要将其转换为数组,经常使用:

var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)

现在,ES2015 的扩展语法用于将可迭代对象(包括NodeListHTMLCollection )转换为数组:

const anchorArray = [...document.getElementsByTagName('a')]

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

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

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

slice(0)允许您返回您正在引用的现有数组的数组,在本例中为命名空间。

除了@Anon所说的:

slice()方法选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。

示例 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

更多信息可以在这里找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM