Неожидаемый вывод в 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"> В чем может быть проблема? |
Забей.
|
А мне вот больше ненравится что во втором варианте результат одинаков. Удобней было бы отлаживать когда объекты выведенные в консоль можно было бы рендерить повторно. Ато чтобы посмотреть изменения надо заново выводить объект в консоль.
|
Ымя, в консоль выводится текущий объект в реальном времени. Если что-то в нём поменялось - поменяется и в консоли. Еслиб было иначе - пришлось бы делать полный снимок состояния на момент вывода, что привело бы к нещадной утечке памяти.
Хочешь чтоб первый вариант работал как второй? Пожалуйста: перед выводом в ручную приводи к строке. То что - второй вообще работает - скорее баг отображения, вызванный, надо полагать, оптимизациями; ссылка же всё равно указывает на один и тот же объект, в окончательном его состоянии. |
Часовой пояс GMT +3, время: 04:30. |