Objektreferenz in Array.prototype.fill()
Bei Verwendung von Array.prototype.fill() zum Initialisieren eines Arrays mit Objekten, Es ist wichtig zu beachten, dass die Methode einen Verweis auf dasselbe Objekt übergibt, anstatt für jedes Element neue Instanzen zu erstellen. Dies kann zu unerwartetem Verhalten führen, wenn Eigenschaften der Objekte nach der Initialisierung geändert werden.
Betrachten Sie das folgende Beispiel:
var arr = new Array(2).fill({}); arr[0] === arr[1]; // true arr[0].test = 'string'; arr[1].test === 'string'; // also true
In diesem Beispiel werden zwei Array-Elemente mit derselben Objektreferenz initialisiert. Infolgedessen verweisen sowohl arr[0] als auch arr[1] auf dasselbe Objekt. Wenn die Testeigenschaft auf arr[0] gesetzt ist, wird sie aufgrund der gemeinsamen Referenz auch automatisch auf arr[1] gesetzt.
Um dieses Problem zu vermeiden, kann man stattdessen das Array mit einem beliebigen Wert und füllen Verwenden Sie dann map(), um für jedes Element neue Objekte zu erstellen:
var arr = new Array(2).fill(undefined).map(u => ({})); var arr = new Array(2).fill().map(Object);
In diesen Beispielen wird zunächst der undefinierte oder Nullwert zum Füllen des Arrays verwendet. Anschließend wird map() verwendet, um für jedes Element neue Objekte zu erstellen und so das Array effektiv mit unterschiedlichen Objekten zu füllen.
Das obige ist der detaillierte Inhalt vonWarum erstellt „Array.prototype.fill()' Objektverweise statt Kopien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!