.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; iiconst 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) 在这里有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中使用“return!0”有啥意义吗?