Так что мой вопрос такой же, как в заголовке. Я видел, что здесь кто-то инициировал подобное (Если мы создадим массив объектов с помощью new Array (len) .fil ({}); а затем добавьте ключ в любой из объектов, он будет отражен во всех 3 объектах), но, хотя все обвиняли неправильный метод допроса, никто не дал четкого ответа.
Ответ казался очень ясным.
Возможный дубликат Если мы создадим массив объектов с помощью new Array (len) .fil ({}); а затем добавьте ключ в любой из объектов, он будет отражен во всех 3 объектах - я понимаю, что это кажется дерзким, но я действительно думаю, что ответа на вопрос, который вы связали, более чем достаточно ...
@Paulpro Я узнал это именно тогда, когда пытался использовать push.
@DanielT. [] создает массив, а Array(3) также создает массив. Но fill не создает никаких массивов, потому что он не для этого; он просто заполняет существующий массив. Таким образом, в случае Array(3).fill([]) создается только два массива.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Мне кажется, что единственный ответ на вопрос, который вы связали, совершенно ясен.
Array.fill «заполняет» массив значениями статический. То есть вы создание на одном пустом массиве, а затем ссылаетесь на него во всех трех местах, следовательно, это тот же массив в каждом из индексов внешнего массива
@DanielT. не нужны скриншоты developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
@ MosèRaguzzini В этом посте единственный ответ: «Сравните с: myObj = {}; arr [0] = myObj; arr [1] = myObj; arr [2] = myObj;" - что это значит, и еще одно, в котором объясняется, как это решить. Я не вижу объяснения "почему"
но для полной ясности: array.fill «заполняет» массив статическим значением. то есть вы создали массив с тремя индексами, а затем «заполнили» его ссылкой на новый массив. так что у вас есть то, что составляет "var inner = []; var external = [inner, inner, inner];"
@DanielT. Если вы хотите обсудить, является ли это дубликатом, вам следует сделать это под вопросом, а не под этим ответом.
Я пытаюсь помочь вам продуктивно использовать Stack Overflow. Почему вы грубо обращаетесь с тем, кто пытается помочь?
Array(3).fill([]) создает 3 элемента ссылка переданного объекта.
Ответ ясен в документации javascript:
The fill() method fills all the elements of an array from a start index to an end index with a static value
лол, почему ты получил акцепт? Мой ответ был явно лучшим :-P
@LeroyStav Пара возможностей: 1) Этот был написан примерно на 1 минуту раньше вашего. 2) OP расстроился в комментариях под вашим ответом. 3) OP не согласен и думает, что это лучший ответ (он цитирует документы). Я поддержал вас, чтобы компенсировать боль.
МОРА КАРМА! ВУ!
Array(3).fill([])создает два массива.[[],[],[]]создает четыре массива. Разница довольно очевидна, если вы выполнитеarr[0].push( 'foo' ); console.info( arr );после создания массива.