【问题标题】: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)

【问题讨论】:

    标签: javascript jquery type-conversion slice


    【解决方案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() 做了什么。 Stackoverflow 不适用于反刍文档。问题是slice(0) 的意义是什么。在这种情况下,您的问题根本没有回答。
        猜你喜欢
        • 2018-08-12
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 2020-07-17
        相关资源
        最近更新 更多