В Chrome console
объект определяет два метода, которые, кажется, делают одно и то же:
console.log(...)
console.dir(...)
Я где-то читал в Интернете, где dir
перед записью берется копия объекта, тогда как я log
просто передаю ссылку на консоль, а это означает, что к тому времени, когда вы начнете проверять зарегистрированный объект, он может измениться. Однако некоторые предварительные испытания показывают, что нет никакой разницы и что они оба страдают от потенциального отображения объектов в разных состояниях, чем когда они были зарегистрированы.
Попробуйте это в консоли Chrome ( Ctrl+ Shift+ J), чтобы понять, что я имею в виду:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2
Теперь разверните [Object]
ниже оператора log и обратите внимание, что он показывает foo
со значением 2. То же самое верно, если вы повторите эксперимент, используя dir
вместо log
.
Мой вопрос: почему существуют эти две, казалось бы, идентичные функции console
?
источник
console.log([1,2])
иconsole.dir([1,2])
вы увидите разницу.console.dir
не изменяется, поэтому оно имеет большое значение.console.dir()
: эта функция нестандартна ! Так что не используйте его на производстве;)Ответы:
В Firefox эти функции ведут себя совершенно иначе:
log
выводит толькоtoString
представление, аdir
выводит навигационное дерево.В Chrome
log
уже распечатывается дерево - большую часть времени . Тем не менее, Chrome по-log
прежнему приводит в порядок определенные классы объектов, даже если они имеют свойства. Возможно, самым ярким примером разницы является регулярное выражение:Вы также можете увидеть четкую разницу с массивами (например,
console.dir([1,2,3])
), которыеlog
отличаются от обычных объектов:Объекты DOM также демонстрируют различное поведение, как отмечено в другом ответе .
источник
console.log
похоже, это упрощенная версия Firefox, которая выглядитtoString
скорее как дерево. Я еще не уверен, когда они изменили это, но они сделали.console.log
или открываете ее позже. Да, действительно. :-)console.log
, ноconsole.dir
вы можете увидетьprototype
,arguments
свойство.console.log
и наconsole.dir
самом деле возвращают то же представление[1,2,3]
в Firefox.Еще одно полезное отличие в Chrome существует при отправке элементов DOM на консоль.
Примечание:
console.log
печатает элемент в HTML-подобном деревеconsole.dir
печатает элемент в JSON-подобном деревеВ частности,
console.log
особое внимание уделяется элементам DOM, тогда какconsole.dir
нет. Это часто полезно при попытке увидеть полное представление объекта DOM JS.В справке по API Chrome Console содержится дополнительная информация об этой и других функциях.
источник
Я думаю, что Firebug делает это не так, как инструменты разработчика Chrome. Похоже, что Firebug дает вам строковую версию объекта, а
console.dir
расширяемый объект. Оба дают вам расширяемый объект в Chrome, и я думаю, что это может привести к путанице. Или это просто ошибка в Chrome.В Chrome оба делают одно и то же. Продолжая тестирование, я заметил, что Chrome получает текущее значение объекта при его расширении.
Вы можете использовать следующее, чтобы получить строковую версию объекта, если это то, что вы хотите увидеть. Это покажет вам, что это за объект во время вызова этой строки, а не когда вы ее развернете.
источник
Используйте console.dir () для вывода объекта для просмотра, который вы можете щелкнуть вместо версии .toString (), например:
Как показать полный объект в консоли Chrome?
источник
С сайта Firebug http://getfirebug.com/logging/
источник
Следуя совету Феликса Клингса, я попробовал его в своем браузере Chrome.
console.dir([1,2])
дает следующий вывод:Пока
console.log([1,2])
выдает следующий вывод:Поэтому я считаю, что его
console.dir()
следует использовать для получения дополнительной информации, такой как прототип и т. Д., В массивах и объектах.источник
Разница между
console.log()
иconsole.dir()
:Вот разница в двух словах:
console.log(input)
: Браузер регистрирует в хорошо отформатированном видеconsole.dir(input)
: Браузер регистрирует только объект со всеми его свойствамиПример:
Следующий код:
Регистрирует следующее в google dev tools:
источник
Ни один из 7 предыдущих ответов не указано , что
console.dir
поддерживает дополнительные аргументы :depth
,showHidden
и использовать лиcolors
.Особый интерес представляет то
depth
, что (в теории) позволяет перемещать объекты на более чем 2 уровня, которыеconsole.log
поддерживаются по умолчанию .Я написал «в теории» , поскольку на практике , когда я был объект Мангуста и побежал
console.log(mongoose)
иconsole.dir(mongoose, { depth: null })
, выход был тем же. Что на самом деле Рекурсия глубоко вmongoose
объект был с помощьюutil.inspect
:источник