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

Posted

技术标签:

【中文标题】.slice(0) 在这里有啥意义?【英文标题】:What's the point of .slice(0) here?.slice(0) 在这里有什么意义? 【发布时间】:2011-06-28 18:54:01 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

sort() 修改了它被调用的数组 - 绕过改变其他代码可能依赖的东西并不是很好。

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

【讨论】:

@ide 答案更准确:“也用于将类数组对象转换为数组”【参考方案2】:

arr.slice(0) 通过从索引 0 处的元素到最后一个元素的切片来复制原始数组。

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

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

【讨论】:

slice 对于 document.getElementsByName(在 Firefox 3.16 中)返回的值是“未定义的”。我用过: var iiNodes=[], tmp = editorDocument.getElementsByName("intInfo"); for (var ii=0; ii htmlCollection.slice 未定义但 Array.slice 确实存在,因此 [].slice.call 业务。 在我看到的一个例子中,const nav = Array.prototype.slice.call(document.querySelectorAll('.nav'), 0); 为什么使用 Array.prototype 比 [] 更好?【参考方案3】:

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

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

字符串也有类似的情况。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

除了@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找到。

【讨论】:

不,准确地说,结果将是["Lemon", "Apple"]。我们都知道slice() 做了什么。 *** 不适用于反刍文档。问题是slice(0) 的意义是什么。在这种情况下,您的问题根本没有回答。

以上是关于.slice(0) 在这里有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章

(void) first2++ 这里有啥意义? [复制]

在javascript中使用“return!0”有啥意义吗?

什么是.slice在这里?

Array.prototype.slice.call(array, 0) 有啥用?

在 kotlin 中命名伴生对象有啥意义

在 Go 中使用指针有啥意义?