Подтвердить что ты не робот

Какая разница между FireBug console.log() и console.debug()?

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

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(). Из-за этого я потерял несколько часов, поскольку я думал, что сращивание играет смешно, делая мой массив многомерным или чем-то.

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

4b9b3361

Ответ 1

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

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

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

Посмотрите на эту страницу показывает в console.log:

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

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

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

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

Ответ 2

В 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().