почему console.log () создает / ** id: 4 ** / и / ** ref: 4 ** / values? - PullRequest
0 голосов
/ 31 мая 2018

Несколько минут назад я сделал этот ответ , а фрагмент ответа ниже

let obj = {staff_changes: []};
let newStaff=[];
for (let i = 0; i < 4; i++) {
 newStaff.push({id: 'staff' +i});
 obj.staff_changes.push({
  id: i,
  newStaff: newStaff
 });
}
console.log(obj);

Если вы запустите этот фрагмент кода выше, вы увидите /**id:4**/ и /**ref:4**/.Что это?

Когда код во время выполнения, это помещало одинаковые повторяющиеся значения в массив.Поэтому я надеюсь, что в начальный момент он генерирует Id:4, и если будет существовать такое же повторяющееся значение, просто напишите комментарий, например /**ref:4**/, где 4 означает Id=:4, который уже сгенерирован.

Итак, я хочу знать Правильно ли я понимаю? .Если мое понимание верно, , тогда как мы можем избежать этого? Должен ли я использовать object.assign() перед тем, как помещать значение в массив, чтобы избежать этого?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

В зависимости от ваших консольных инструментов, они будут отображать подобный объект по-разному.Эти комментарии говорят о том, что в объекте больше информации.

Если вы хотите видеть внутренности единообразно, вы можете привести в порядок весь объект

console.log(JSON.stringify(obj));

, в этом случаеВы получите:

{"staff_changes": [{"id": 0, "newStaff": [{"id": "staff0"}, {"id": "staff1"},{ "ID": "staff2"}, { "идентификатор": "staff3"}]}, { "идентификатор": 1, "newStaff": [{ "ID": "staff0"}, { "идентификатор":»персонала1 "}, {" идентификатор ":" staff2 "}, {" идентификатор ":" staff3 "}]}, {" идентификатор ": 2," newStaff ": [{" ID ":" staff0 "}, {"идентификатор ":" персонала1 "}, {" идентификатор ":" staff2 "}, {" идентификатор ":" staff3 "}]}, {" идентификатор ": 3," newStaff ": [{" ID ":" staff0"}, {"id": "staff1"}, {"id": "staff2"}, {"id": "staff3"}]}]}

В некоторых инструментах разработчика выВы можете развернуть объект, когда войдете в консоль, но в приведенной выше строке выводится информация о всех инструментах.

0 голосов
/ 31 мая 2018

Ваша структура данных содержит несколько ссылок на один и тот же объект.console.log достаточно умен, чтобы сокращать вывод.

Обратите внимание, что (AFAIK) спецификация не гарантирует какого-либо конкретного вывода из console.log для объектов, которые не являются экземплярами String, поэтому вы не можетеполагаться на то, что эти выходные данные одинаковы для всех браузеров, версий, фаз Луны и т. д.

Рассмотрим бесконечно рекурсивную структуру данных, например const a = []; a.push(a); console.log(a), которую вы бы предпочли: блокировать компьютер во время печатибесконечно рекурсивный массив или console.log его сокращение?

const a = []
a.push(a)
console.log(a)
// [
//   /**id:1**/
//   /**ref:1**/
// ]
...