Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Неожидаемый вывод в console.log объекта html (https://javascript.ru/forum/misc/53216-neozhidaemyjj-vyvod-v-console-log-obekta-html.html)

Ымя 25.01.2015 13:50

Неожидаемый вывод в console.log объекта html
 
Всем привет.
Обнаружил следующую странность при выводе объекта в консоль (проверял в FF35.0 и Chrome 40.0.2214.91 m).
На странице html есть элемент:
<div id="test" class="first">Тест</div>

Если выполнять следующий js-код:
var tt = document.getElementById('test');
console.log('Тест: %s', tt.className);
console.log('Тест: %o', tt);
tt.className = 'second';
console.log('Тест: %s', tt.className);
console.log('Тест: %o', tt);

то в консоле получаем :blink::
"Тест: first"
"Тест: " <div class="second" id="test"> 
"Тест: second"
"Тест: " <div class="second" id="test">

Возникает вопрос: каким образом в консоль выводится
"Тест: " <div class="second" id="test">
с значением параметра class="second", если замена значения этого параметра происходит после вывода в консоль?

При этом, если выполнять ранее указанный js-код в отладчике пошагово или с задержкой перед сменой значения параметра, например, используя alert
var tt = document.getElementById('test');
	console.log('Тест: %s', tt.className);
	console.log('Тест: %o', tt);
	alert('ok');
	tt.className = 'second';
	console.log('Тест: %s', tt.className);
	console.log('Тест: %o', tt);

то в консоли получаем ожидаемый (правильный) результат:
"Тест: first"
"Тест: " <div class="first" id="test">
"Тест: second"
"Тест: " <div class="second" id="test">


В чем может быть проблема?

danik.js 25.01.2015 16:46

Забей.

SV0L0CH 25.01.2015 17:04

А мне вот больше ненравится что во втором варианте результат одинаков. Удобней было бы отлаживать когда объекты выведенные в консоль можно было бы рендерить повторно. Ато чтобы посмотреть изменения надо заново выводить объект в консоль.

Aetae 26.01.2015 04:18

Ымя, в консоль выводится текущий объект в реальном времени. Если что-то в нём поменялось - поменяется и в консоли. Еслиб было иначе - пришлось бы делать полный снимок состояния на момент вывода, что привело бы к нещадной утечке памяти.

Хочешь чтоб первый вариант работал как второй? Пожалуйста: перед выводом в ручную приводи к строке. То что - второй вообще работает - скорее баг отображения, вызванный, надо полагать, оптимизациями; ссылка же всё равно указывает на один и тот же объект, в окончательном его состоянии.


Часовой пояс GMT +3, время: 23:03.