Ho iniziato a mettere in discussione ciò che so, o ho pensato che lo so, dopo questa domanda:
Array.fill si differenzia dalla definizione letterale 2D sull'assegnazione
Una domanda JavaScript, che definisce una matrice con lunghezza predefinita e la riempie di valori, quindi modifica uno dei valori all'interno della seconda dimensione.
Mutabilità , in questo caso applicato, il primo nuovo array (9) sarà il mio oggetto, contenente un array vuoto ([]) , con una lunghezza predefinita di 9. E il primo che segue .fill () sarà il metodo mutable chiamato, rendendo l'oggetto referenced ([]) in qualunque cosa desiderata venga riempita ([ ..., ..., ..., ...]) , mantenendo la lunghezza. In questo caso, se provo questo su un array a dimensione singola, tutto andrà bene, farò riferimento all'oggetto principale stesso e ad aggiornare i valori di esso di conseguenza con le sue chiavi.
Se prendo questo nella seconda dimensione, immagino che questa sia la parte di cui principalmente non mi occupo, ora sto invece riempiendo l'array vuoto di 9 lunghezze iniziali ([]) con un nuovo singolo Array vuoto di 9 lunghezze riempite con 9 zeri , per ogni indice riempito fino all'ultimo, ma non sembra?
Invece, il nuovo riferimento sembra non essere considerato, o contato come un nuovo oggetto , ma più come un semplice riferimento. Proprio come questo:
var arr1 = new Array(9).fill(0);
var arr2 = new Array(9).fill(arr1);
Quindi, sto riempiendo nove riferimenti alla prima, prima dimensione. Quindi, se aggiorno il 3 ° o 4 ° indice non è importante, poiché tutti puntano allo stesso riferimento e aggiornano il valore arr1 del riferimento all'indice specificato.
Che cosa mi manca qui che causa il passaggio di riferimenti al posto di un nuovo oggetto come pensavo?