бесконечные внутренние массивы с методом pu sh () в консоли javascript chrome - PullRequest
3 голосов
/ 21 января 2020

Недавно я экспериментировал с методом массива push() в javascript. Я создал массив и выдвинул тот же массив, используя метод pu sh.

var a=['hello', 4]

a.push(a)

результат был удивительным, когда я исследовал элементы массива в консоли chrome, был создан бесконечный массив. Я хочу знать, почему это происходит. Так как метод push() добавляет элемент последним.

Я ожидал этого результата

['hello, 4, ['hello',4]]

, но результат был совсем другим, вот скриншот проблемы chrome console , скриншот бесконечных внутренних массивов с использованием pu sh метод в JavaScript

Ответы [ 2 ]

5 голосов
/ 21 января 2020

Когда вы присваиваете объект переменной в Javascript (и, действительно, в большинстве похожих языков), эта переменная содержит то, что называется «ссылкой» на этот объект. Обратите внимание, что массивы в JS являются объектами, но примитивные значения, такие как строки и числа, не являются.

Одним из следствий назначения объекта «по ссылке» является то, что любое изменение, которое вы вносите в этот объект, даже если оно выполнено к другой переменной, которая ссылается на тот же объект - «появится» при проверке исходной переменной.

Итак, вы начинаете с

var a=['hello', 4]

и затем делаете

a.push(a)

затем объект (массив), на который a указывает, был изменен. Теперь у него есть дополнительный элемент в конце - это a, тот самый массив, о котором мы говорим.

Итак, он рекурсивно расширяется:

a = ['hello', 4, a]
  = ['hello', 4, ['hello', 4, a]]
  = ['hello', 4, ['hello', 4, ['hello', 4, a]]]
   ...

И так далее, бесконечно. Это не требует бесконечного количества памяти, потому что третий элемент массива является просто ссылкой на область памяти, которая содержит массив.

0 голосов
/ 21 января 2020

Я думаю, что Робин полностью описал причину этого. Я хочу добавить, что вы можете использовать остальные параметры в javascript, чтобы добавить элемент массива в другой. Ниже я привожу пример таких параметров:

let name=["john","Sarah"];
name.push(...name);
console.log(name);

Итак, как вы можете видеть, элементы массива помещаются в массив вместо объекта массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...