Schauen wir uns zunächst eine Frage an:
Wie ist die {length:5} von Array.apply(null, {length:5}) zu verstehen? Ich hoffe, dass die Analyse von Arrays in JavaScript jedem helfen kann.
Ich habe getestet
Array.apply(null, {length:5}) //返回[undefined, undefined, undefined, undefined, undefined] Array.apply(null, [{length:5}])和Array({length:5})返回的结果是一样的,为[[object Object] { length: 5 }]
Der Zweite und der Dritte sind immer noch verständlich! Wie ist das erste zu verstehen?
Eigentlich hat das nichts mit Array zu tun, ich bin nur zufällig darauf gestoßen, als ich Array verwendet habe.
Ich denke, dieses Problem sollte mit Function.call und Function.apply gelöst werden.
Die Methoden dieser beiden Funktionen haben die gleiche Funktion und werden beide zum Ändern des Zeigers dieser Funktion verwendet.
Der einzige Unterschied besteht darin, dass die Parameter unterschiedlich sind. Der zweite Parameter von apply muss im Array übergeben werden.
Zuerst benötigen Sie eine Funktion, um ein iAmArray zu definieren.
var iAmArray = function(){ return arguments; };
Machen Sie sich hier keine Sorgen. Hier sind drei Möglichkeiten, es normal aufzurufen:
//方便你复制到 Console 中测试,在此再写一遍 var iAmArray = function(){ return arguments; }; //普通写法 iAmArray(1,2,3); /* [1, 2, 3] */ //call写法 iAmArray.call(null,1,2,3); /* [1, 2, 3] */ //apply写法 iAmArray.apply(null,[1,2,3]); /* [1, 2, 3] */
Beim Aufruf der apply-Methode handelt es sich wahrscheinlich um einen kleinen Fehler. Solange es ein Objekt ist und eine Länge hat, wird es als Array behandelt. Es hat eigentlich nichts mit Array zu tun. Dies kann bei jeder Funktion passieren.
//方便你复制到 Console 中测试,在此再写一遍 var iAmArray = function(){ return arguments; }; var iHaveLength = function(length){ this.length = length || 5; this[2] = "第三个元素"; }; /* 只要是 Object,还有length,他就当作数组处理了。 */ iAmArray.apply(null, new iHaveLength()); /* [undefined, undefined, "第三个元素", undefined, undefined] */ iAmArray.apply(null, new iHaveLength(3)); /* [undefined, undefined, "第三个元素"] */
Abschließende Zusammenfassung
Tatsächlich muss der zweite Parameter nur ein Array-ähnliches Objekt sein. Beispielsweise kann {length: 5} betrachtet werden Als Klassenarray-Objekt beträgt die Länge 5, jedes Element, z. B. v[0], ist undefiniert.
Array.apply(null, { length: 5}) entspricht also
Array(undefiniert, undefiniert, undefiniert, undefiniert, undefiniert)
Das obige ist der detaillierte Inhalt vonArray.apply-Analyse in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!