Ich studierte die jQuery-Quelle, als ich dies fand (v1.5, Zeile 2295):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
Meine Frage ist, warum verwenden slice(0)
hier?
mVChr
Ich studierte die jQuery-Quelle, als ich dies fand (v1.5, Zeile 2295):
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
Meine Frage ist, warum verwenden slice(0)
hier?
sort()
ändert das Array, auf dem es aufgerufen wird – und es ist nicht sehr schön, Dinge zu mutieren, auf die sich anderer Code verlassen könnte.
slice()
gibt immer ein neues Array zurück – das von zurückgegebene Array slice(0)
ist identisch mit der Eingabe, was im Grunde bedeutet, dass es eine billige Möglichkeit ist, ein Array zu duplizieren.
@ide Antwort ist präziser: “wird auch verwendet, um Array-ähnliche Objekte in Arrays umzuwandeln”
– Michael Laffargue
9. März 2016 um 9:47 Uhr
ide
arr.slice(0)
erstellt eine Kopie des ursprünglichen Arrays, indem ein Slice vom Element bei Index 0 bis zum letzten Element genommen wird.
Es wurde auch verwendet, um Array-ähnliche Objekte in Arrays umzuwandeln. Zum Beispiel ein DOM NodeList
(wird von mehreren DOM-Methoden zurückgegeben, z getElementsByTagName
) ist kein Array, aber ein Array-ähnliches Objekt mit a length
-Feld und ist in JavaScript indexierbar. Um es in ein Array umzuwandeln, verwendete man oft:
var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
Jetzt wird die Spread-Syntax von ES2015 verwendet, um iterierbare Objekte zu konvertieren, einschließlich NodeList
und HTMLCollection
zu Arrays:
const anchorArray = [...document.getElementsByTagName('a')]
Slice ist für den von document.getElementsByName (in Firefox 3.16) zurückgegebenen Wert „undefiniert“. Ich habe verwendet: var iiNodes=[], tmp = editorDocument.getElementsByName(“intInfo”); for (var ii=0; ii
– Ribos
31. Mai 2011 um 17:42 Uhr
HTMLCollection.slice ist undefiniert, aber Array.slice existiert, daher die [].slice.call business.
– ide
4. Juni 2011 um 1:20 Uhr
In einem Beispiel sah ich, const nav = Array.prototype.slice.call(document.querySelectorAll('.nav'), 0);
warum ist die Verwendung von Array.prototype besser als []?
– kchetan
23. Januar 2020 um 21:00 Uhr
Abhi
slice(0)
erstellt ein neues Array, das mit dem ursprünglichen Array identisch ist. Oft möchten Sie Ihr ursprüngliches Array beibehalten und ein neues erstellen.
Wenn du benutzt slice(1)
wird ein anderes Array erstellt, beginnend bei Indexposition 1.
Ähnliches gilt auch für Saiten.
slice(0)
ermöglicht es Ihnen, ein Array des vorhandenen Arrays zurückzugeben, auf das Sie verweisen, in diesem Fall Namespaces.
Zusätzlich zu dem, was @Anon gesagt hat:
Das slice()
-Methode wählt die Elemente aus, beginnend mit dem angegebenen Startargument, und endet mit dem angegebenen Endargument, schließt es jedoch nicht ein.
Beispiel 1:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3);
Das Ergebnis von Zitrusfrüchten wird sein:
Orange,Lemon
Beispiel2:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(-3, -1);
Das Ergebnis von Zitrusfrüchten wird sein:
Lemon,Apple
Weitere Informationen finden Sie hier.
Nein, das Ergebnis wird sein ["Lemon", "Apple"]
um genau zu sein. Und wir alle wissen was slice()
tut. Stackoverflow ist nicht zum Nachwürgen von Dokumentation gedacht. Die Frage ist, was der Sinn von slice(0)
ist. Was in diesem Zusammenhang deine Frage überhaupt nicht beantwortet.
– zfj3ub94rf576hc4eegm
2. Januar 2018 um 16:34 Uhr
Nein, das Ergebnis wird sein ["Lemon", "Apple"]
um genau zu sein. Und wir alle wissen was slice()
tut. Stackoverflow ist nicht zum Nachwürgen von Dokumentation gedacht. Die Frage ist, was der Sinn von slice(0)
ist. Was in diesem Zusammenhang deine Frage überhaupt nicht beantwortet.
– zfj3ub94rf576hc4eegm
2. Januar 2018 um 16:34 Uhr