Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятное поведение - console.log (https://javascript.ru/forum/misc/43209-neponyatnoe-povedenie-console-log.html)

Artyom 26.11.2013 18:22

Непонятное поведение - 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]. В других браузерах, кроме этих трёх, не проверял. Почему так происходит?

Artyom 26.11.2013 19:51

Вложений: 1
Цитата:

Сообщение от Rise (Сообщение 282971)
Потому что это ваши иллюзии...

Спасибо за ваше мнение.

ksa 26.11.2013 20:38

Оно не только его... :D

Artyom 26.11.2013 20:43

Это прекрасно, но ведь и я не из головы это взял - точно так же привёл скриншот, сделанный буквально только что. Кто может объяснить такую аномалию?

Maxmaxmaximus3 27.11.2013 02:40

Это происходит потому что консоль вебкитов кэширует обьект отображаемый в консоли и не перерисовывает его в реальном времени. ВИДИМО. можешь попробовать алертом и все будет работать, можешь попробовать выводить приметив console.log(x[1]) и все будет работать. такая вот особенность консоли в хроме, и ДА, она всех бесит

Artyom 27.11.2013 10:31

Maxmaxmaximus3,
Спасибо. Я голову сломал, почему console.log выводит массив с нулём, а следующей строчкой элемент этого массива равным единице. Вот такой вот весёлый дебаггинг...

animhotep 27.11.2013 12:31

breakpoint-ы тебя спасут

FINoM 27.11.2013 18:09

Цитата:

Сообщение от Maxmaxmaximus3
она всех бесит

Не отвечай за всех. Такая особенность позволяет видеть реальное состояние объекта. Для того, чтоб увидеть, как он меняется во времени, просто клонируй его.

Maxmaxmaximus3 28.11.2013 03:37

Цитата:

Сообщение от FINoM
Не отвечай за всех.

Ты говоришь актуальное, актуальное оно на момент просмотра, и если ты просмотрел обьект, а потом что-то изменилось в нем, и ты еще раз его просмотришь, то изменений уже не будет, это баг а не фитча, при чем он необходим для оптимизации консоли и не для чего более. Но ты можешь переубедить меня: Приведи хотя бы один пример когда такое поведение консоли хорошо а не плохо.

kobezzza 28.11.2013 12:22

Это происходит потому, что console.log возвращает ссылку и некоторые отладчики отображают всегда реальное состояние объекта по этой ссылке (т.к. отображение происходит после изменений данных), а там где отображение идёт последовательно (например в Фаербаге, то более ожидаемый результат). Если же "развернуть" ссылку которую даёт отладчик, то везде конечно же будет актуальное состояние объекта.

Это не баг, и не фича, по идеи console.log так и должен работать, т.е. он просто выводит в консоль ссылку или элементарное значение, а то, что в ФФ или ИЕ он ещё и показывает некоторое состояние на момент вызова - это просто сделано ради удобства.


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