В чем разница между console.log () FireBug и console.debug ()? - PullRequest
16 голосов
/ 16 июня 2010

Очень простой код для иллюстрации разницы.

var x = [0, 3, 1, 2];
console.debug('debug', x);
console.log('log', x);
// above display the same result
x.splice(1, 2);
// below display kind of a different result
console.debug('debug', x);
console.log('log', x);

alt text http://sixbytesunder.com/stuff/firebug_console.png

Значение javascript точно такое же, но console.log () отображает его немного по-другомучем до применения splice() метода.Из-за этого я потерял довольно много часов, так как думал, что сплайс ведет себя смешно, делая мой массив многомерным или что-то в этом роде.

Я просто хочу знать, почему это работает так.Кто-нибудь знает?:)

Ответы [ 2 ]

9 голосов
/ 16 июня 2010

Если вы посмотрите на документацию, там написано :

Консоль знает четыре разных типа сообщений, которые описаны ниже [...]

См. Также API консоли для получения дополнительной информации. информация о разных команды.

Взгляд на эту страницу показывает на console.log:

Если объекты зарегистрированы, они будут написано не как статический текст, а как интерактивные гиперссылки, которые могут быть щелкнул, чтобы осмотреть объект в HTML, CSS, Script или DOM Firebug Вкладки.

Итак, я думаю, что до splice массив все еще является Array (я знаю, что является своего рода объектом), но после операции Вы получаете общий объект, по крайней мере, внутренне. Я знаю, что это слабое объяснение, но Firebug ведет себя более странно в консоли.

Кстати, спецификация ECMAScript не говорит ничего полезного, но мы можем прочитать в разделе о Array.prototype.splice (§ 15.4.4.12):

Функция splice преднамеренно общий; это не требует, чтобы его this значение будет объектом Array. Поэтому его можно перенести в другие виды объектов для использования в качестве метод. Является ли функция splice может быть успешно применен к хосту объект зависит от реализации.

1 голос
/ 17 июня 2010

В Firebug 1.6a12 я получаю

debug [0, 3, 1, 2]  blog.php (line 80)
log [0, 3, 1, 2]
debug [0, 2]        blog.php (line 85)
log [0, 2]

Строки debug() содержат ссылку на строку источника строки console.debug().

...