Непонятное поведение - console.log
Добрый вечер.
Обнаружил непонятное поведение функции console.log (или декримента?). Есть код следующего вида: var x = [0, 1, 1, 0]; console.log(x); x[1]--; console.log(x); По какой-то причине Хром (и новая опера) выводят в консоль оба раза [0, 0, 1, 0]. И только 10й IE выводит ожидаемый результат - сначала [0, 1, 1, 0], а потом [0, 0, 1, 0]. В других браузерах, кроме этих трёх, не проверял. Почему так происходит? |
Вложений: 1
Цитата:
|
Оно не только его... :D
|
Это прекрасно, но ведь и я не из головы это взял - точно так же привёл скриншот, сделанный буквально только что. Кто может объяснить такую аномалию?
|
Это происходит потому что консоль вебкитов кэширует обьект отображаемый в консоли и не перерисовывает его в реальном времени. ВИДИМО. можешь попробовать алертом и все будет работать, можешь попробовать выводить приметив console.log(x[1]) и все будет работать. такая вот особенность консоли в хроме, и ДА, она всех бесит
|
Maxmaxmaximus3,
Спасибо. Я голову сломал, почему console.log выводит массив с нулём, а следующей строчкой элемент этого массива равным единице. Вот такой вот весёлый дебаггинг... |
breakpoint-ы тебя спасут
|
Цитата:
|
Цитата:
|
Это происходит потому, что console.log возвращает ссылку и некоторые отладчики отображают всегда реальное состояние объекта по этой ссылке (т.к. отображение происходит после изменений данных), а там где отображение идёт последовательно (например в Фаербаге, то более ожидаемый результат). Если же "развернуть" ссылку которую даёт отладчик, то везде конечно же будет актуальное состояние объекта.
Это не баг, и не фича, по идеи console.log так и должен работать, т.е. он просто выводит в консоль ссылку или элементарное значение, а то, что в ФФ или ИЕ он ещё и показывает некоторое состояние на момент вызова - это просто сделано ради удобства. |
Часовой пояс GMT +3, время: 08:59. |