什么是.slice在这里?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是.slice在这里?相关的知识,希望对你有一定的参考价值。

当我发现这个时,我正在研究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)不是一个数组,但它是一个类似于数组的对象,带有length字段,并且在javascript中是可索引的。要将其转换为数组,通常使用:

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

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

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

类似的东西也适用于字符串。

另一答案

slice(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找到。

以上是关于什么是.slice在这里?的主要内容,如果未能解决你的问题,请参考以下文章

为什么我得到'TypeError:无法读取属性'slice'的undefined'?

JS常用代码片段2-值得收藏

JS常用代码片段2-值得收藏

16个必备的JavaScript代码片段

简单的方法来分享/讨论/协作的代码片段?

golang删除数组某个元素