[英]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 的擴展語法用於將可迭代對象(包括NodeList
和HTMLCollection
)轉換為數組:
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.