Является ли console.dir () в javascript или firefox асинхронным? - PullRequest
7 голосов
/ 13 марта 2012

Очень странная проблема.

В своей отладке я обнаружил, что console.dir (anArray) не выводит текущее значение на консоль firebug браузера.

Например,

console.dir(anArray)              //line 1
console.log(anArray[0].prop1)     //line 2
code to change the value of anArray[0].prop1  //line 3

anArray - это массив объектов javascript / json,

в консоли Firbug, строка 1 выводит новое значение, которое задается в строке 3,

и строке2 - старое значение, и это то, что я хочу.

Единственное объяснение состоит в том, что console.dir () является асинхронным, верно?!

мой env: Windows7, Firefox 6.0.2, firebug1.9.1, javascript lib - это DOJO (но я думаю, что это не имеет к этому отношения.)

Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 февраля 2013

Самое важное с console.dir (по крайней мере в Chrome, судя по моему опыту и это ) заключается в том, что расширение оценивает и показывает ток значение объекта, в момент, когда вы выполняете расширение, а не значение в момент вызова console.dir().

См., Например,

<html><body> open/refresh this with the javascript console open
<script>
 var ar = new Float32Array(1);
 ar[0]=2;   
 console.log(ar[0]);
 console.dir(ar);   
 ar[0]=200; 
</script>

Когда вы расширяете массив в консоли, вы видите значение 200.

Это не должно быть ошибкой, и это, безусловно,производительность (объект может быть очень большим), но поведение странное и потенциально сбивающее с толку.

Кроме того, я проверил, что если впоследствии значение изменяется, консоль не обновляет его (поэтомутакже не работает как окно наблюдения в отладчике).

0 голосов
/ 13 марта 2012

Журнал консоли иногда так глючит.Он также менее эффективен в Internet Explorer (обычное место для поиска ошибок), где он не может печатать такие вещи, как объекты и XML-документы.

Я предлагаю вместо использования console.log вместо этого попытаться изучитькак использовать мощные отладчики, доступные в браузерах.Когда вы остановились на точке останова, вы можете проверить все переменные, выполнить произвольные операторы на консоли и пройти вверх и вниз по трассе стека.

0 голосов
/ 21 сентября 2012

Это ошибка в Firefox и Chrome: запустить в консоли:

console.log(a = {b: { c: 0}});
a.b.c = 1;

результат в Firebug:

b: Object { c= 1 }

результат в Chrome:

b: Object
    c: 1
0 голосов
/ 13 марта 2012

Для краткости да. :)

В прошлом у меня была похожая проблема с Chrome, не понимавшая результат моей консоли, но я провел несколько тестов и обнаружил, что это асинхронное поведение. На самом деле, лучше всего использовать внутреннюю функцию setTimeout () для задержки журнала. console.log, похоже, затронут и в моем случае.

...