Ответ 1
Исследование объектов через console.log
происходит асинхронно. Консоль получает ссылку на объект синхронно, но не отображает свойства объекта до тех пор, пока он не будет раскрыт (в некоторых случаях, в зависимости от браузера и наличия инструментов dev, открытых при записи журнала). Если объект был изменен до проверки его в консоли, показанные данные будут иметь обновленные значения.
Например, Chrome немного покажет i
в окне, которое при наведении курсора говорит:
Значение объекта слева было снято при регистрации, значение ниже было оценено только сейчас.
чтобы вы знали, на что вы смотрите.
Один из приемов регистрации в этих случаях заключается в регистрации отдельных значений:
console.log(obj.foo, obj.bar, obj.baz);
Или JSON кодирует ссылку на объект:
console.log(JSON.stringify(obj));