
26.11.2013, 18:22
|
Интересующийся
|
|
Регистрация: 15.08.2013
Сообщений: 12
|
|
Непонятное поведение - 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]. В других браузерах, кроме этих трёх, не проверял. Почему так происходит?
|
|

26.11.2013, 19:51
|
Интересующийся
|
|
Регистрация: 15.08.2013
Сообщений: 12
|
|
Сообщение от Rise
|
Потому что это ваши иллюзии...
|
Спасибо за ваше мнение.
|
|

26.11.2013, 20:38
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,242
|
|
Оно не только его... 
Последний раз редактировалось ksa, 14.08.2019 в 15:01.
|
|

26.11.2013, 20:43
|
Интересующийся
|
|
Регистрация: 15.08.2013
Сообщений: 12
|
|
Это прекрасно, но ведь и я не из головы это взял - точно так же привёл скриншот, сделанный буквально только что. Кто может объяснить такую аномалию?
|
|

27.11.2013, 02:40
|
Профессор
|
|
Регистрация: 18.11.2013
Сообщений: 275
|
|
Это происходит потому что консоль вебкитов кэширует обьект отображаемый в консоли и не перерисовывает его в реальном времени. ВИДИМО. можешь попробовать алертом и все будет работать, можешь попробовать выводить приметив console.log(x[1]) и все будет работать. такая вот особенность консоли в хроме, и ДА, она всех бесит
|
|

27.11.2013, 10:31
|
Интересующийся
|
|
Регистрация: 15.08.2013
Сообщений: 12
|
|
Maxmaxmaximus3,
Спасибо. Я голову сломал, почему console.log выводит массив с нулём, а следующей строчкой элемент этого массива равным единице. Вот такой вот весёлый дебаггинг...
|
|

27.11.2013, 12:31
|
 |
Профессор
|
|
Регистрация: 17.01.2013
Сообщений: 887
|
|
breakpoint-ы тебя спасут
|
|

27.11.2013, 18:09
|
 |
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от Maxmaxmaximus3
|
она всех бесит
|
Не отвечай за всех. Такая особенность позволяет видеть реальное состояние объекта. Для того, чтоб увидеть, как он меняется во времени, просто клонируй его.
|
|

28.11.2013, 03:37
|
Профессор
|
|
Регистрация: 18.11.2013
Сообщений: 275
|
|
Сообщение от FINoM
|
Не отвечай за всех.
|
Ты говоришь актуальное, актуальное оно на момент просмотра, и если ты просмотрел обьект, а потом что-то изменилось в нем, и ты еще раз его просмотришь, то изменений уже не будет, это баг а не фитча, при чем он необходим для оптимизации консоли и не для чего более. Но ты можешь переубедить меня: Приведи хотя бы один пример когда такое поведение консоли хорошо а не плохо.
Последний раз редактировалось Maxmaxmaximus3, 28.11.2013 в 07:54.
|
|

28.11.2013, 12:22
|
 |
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Это происходит потому, что console.log возвращает ссылку и некоторые отладчики отображают всегда реальное состояние объекта по этой ссылке (т.к. отображение происходит после изменений данных), а там где отображение идёт последовательно (например в Фаербаге, то более ожидаемый результат). Если же "развернуть" ссылку которую даёт отладчик, то везде конечно же будет актуальное состояние объекта.
Это не баг, и не фича, по идеи console.log так и должен работать, т.е. он просто выводит в консоль ссылку или элементарное значение, а то, что в ФФ или ИЕ он ещё и показывает некоторое состояние на момент вызова - это просто сделано ради удобства.
Последний раз редактировалось kobezzza, 28.11.2013 в 16:09.
|
|
|
|