簡體   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