FireBug *コンソールAPI

はじめに



Firebugは、Firefoxに読み込まれた各Webページに「console」というグローバル変数を追加します。 このオブジェクトには、Firebugコンソールに書き込み、スクリプトを通過する情報を表示できる多くのメソッドが含まれています。
firebug.ru



幸い、firebugにこの機能があるだけではありません:



この記事はコンソールAPIマニュアルです。

例は クロム クローム28.0.1500.72 m、 ファイアバグ Firebug 1.11.3、 キツネ Firefox 22.0、 オペラ Opera 12.15(prestoで終了する前のバージョン)



内容







マニュアル



console.log(オブジェクト[、オブジェクト、...])

クロム + ファイアバグ + キツネ ± オペラ ±

渡された引数をメッセージとしてコンソールに表示します。 複数の引数が指定されている場合、出力中にスペースで区切られます。

これは、コンソールオブジェクトの最も一般的に使用される方法です。

var a = ' '; console.log(a); console.log(' ', 12, true, [1,2,3], {a:1,b:2}); console.log('Node', document.getElementsByTagName('body')); console.log('DOM', document); console.log('', alert); console.log('', NaN, null, undefined);
      
      



スクリーンショット
クロム クローム-> ファイアバグ ファイアバグ-> キツネ Firefox-> オペラ オペラ

console.log






指定されたコンソールのすべての実装で、配列、オブジェクト、DOM要素などの複雑な要素の構造を表示するためにクリックスルーすることができます。



console.logをいくつかの引数とともに使用する特別なケースがあります。

最初の引数にはprintf()のように置換パターンを含めることができますが、C、PHPなどでのこの関数の実装よりもはるかに小さくなります。

クロム ± ファイアバグ ± キツネ ± オペラ -

模様 説明
%s ひも
%dまたは%i 番号。
%f 浮動小数点数。

Firebugの公式ドキュメントは露骨に嘘をついています「(数値の書式設定はまだサポートされていません)」-信じられない

%o DOM要素

Firebugは要素参照として表示されます。

Chromeは、リンクに加えて、コンソール自体にこの要素を表示する方法をまだ知っています。 現在のバージョン28.0.1500.72 mにはバグ(?)があります-ページが更新されるたびに、DOMコンソールはDOMとして、次にJavascriptオブジェクトとして交互に表示されます。

Firefoxはクリックすると、モーダルウィンドウでアイテムを開きます。 (このオブジェクトのすべての属性とメソッドが利用可能です)。

%O JavaScriptオブジェクト。

Firefoxではサポートされていません。

オブジェクトが単に%Oに入るだけでなく、DOMになった場合のChrome-jsオブジェクトに変換します(すべてのメソッドと属性が利用可能です)。

Firebugは、%oと%oを区別しません。

%c cssスタイル(色、背景、フォント)。

Firefoxではサポートされていません。

 console.log('   %d %s',10,''); console.log('  %f',Math.PI); console.log('%c %c %c%c    ','color:red;','font-size:16px;color:orange;','background:black;color:yellow;','font:normal;color:normal;background:normal;'); console.log('body as DOM: %o',document.getElementsByTagName('body')[0]); console.log('object: %O',{a:1,b:2}); console.log('body as Object: %O',document.getElementsByTagName('body')[0]);
      
      



スクリーンショット
console.logパターン






StreetStriderによるコメント
肝心なのは、コンソールオブジェクトは異なる環境で異なる方法で実装できるということです。 場合によっては、オブジェクトは完全ではありますがネイティブ関数で実装されます。つまり、console.log.toString()を出力しようとする場合です。 ソースコードの代わりに、関数[ネイティブコード]を取得します。 一部の環境では、私が理解しているように、このオブジェクトはかっこで呼び出すことができるものを提供しますが、本格的な機能ではありません:call / apply / bindで呼び出すことはできません。 例から:ChromeデバッガーとIEデバッガー。

メインマイナス:

EventEmitterがあり、そのアクティベーションを開始する必要があります。 これを行うには、console.logなどの何らかの種類のロガーに署名するだけです。
 object.on('event', console.log);
      
      





つまり、console.logは、このエミッターのコールバックが呼び出されるすべてのパラメーターとともに呼び出されます。 これをconsole.dirに置き換えると、一部の環境(Node.js)で最初のパラメーターのより詳細な出力が得られます。 いずれにしても、console.log、console.dirが関数でない場合、それらを呼び出すことはできません。バインディングを記述する必要があります。 さらに、console.logの場合、バインディングに欠陥があります。適用できないため、すべてのパラメーターを渡すことはできません。

 function log (a1, a2, a3) { console.log(a1, a2, a3); //   arguments,     apply }
      
      





そして、唯一の解決策があります-猶予。

一般的に、関数は関数でなければなりません。




console.assert(式[、オブジェクト、...])

クロム + ファイアバグ + キツネ - オペラ ±

expressionに誤りがある場合、 console.errorを出力します ;そうでない場合、何も出力されません。

throw new Error()console.error()の違いは、 console.errorで詳しく説明されています。

式の後にさらに引数が指定されている場合:



Operaでは-expression == falseの場合-console.logのように機能しますが 、そうでない場合は何も表示しません。

 console.assert(2>1); console.assert(1>2); console.assert(2>1,' '); console.assert(1>2,' '); console.assert(1>2,'',''); console.assert(1>2,' : [%s]',''); console.assert(1>2,'','',1,2,3,{a:1});
      
      



スクリーンショット
console.assert








console.clear()

クロム + ファイアバグ + キツネ + オペラ +

コンソールをクリアします。 例はありません。



console.count([オブジェクト])

クロム ± ファイアバグ + キツネ - オペラ ±

特定のコードが実行された回数を表示します。 オプションの引数オブジェクトが渡された場合、カウンター値の前に、 object.toString() **が出力されます。

すべての実装には独自の特性があります。

たとえ±をつけても、Chromeからの実装は不正確だとは思わない。 Googleプログラマーは、firebugプログラマーとは異なるこの機能の見方をしているだけです。

 console.count(); console.count(); //    console.count(''); console.count(''); //      Chrome console.count('','',''); console.count(document); for (i=0;i<2;i++) console.count(); //      for (i=0;i<2;i++) console.count(''); //     
      
      



スクリーンショット
console.count








console.debug(オブジェクト[、オブジェクト、...])

クロム ± ファイアバグ ± キツネ ± オペラ ±

console.logのエイリアス。

コンソールAPIの古いバージョンとの互換性のために存在します。console.debugは、コンソール呼び出しが発生した行へのリンクを追加で表示するという点でconsole.logと異なります。 現在のAPI実装では、 console.logは同じことを行います。

Chromeの場合-テキストを青で表示します( console.logではテキストは濃い灰色で表示されます)。

 var a = ' '; console.debug(a); console.debug(' ', 12, true, [1,2,3], {a:1,b:2}); console.debug('Node', document.getElementsByTagName('body')); console.debug('DOM', document); console.debug('', alert); console.debug('', NaN, null, undefined); console.debug('   %d %s',10,'');
      
      



スクリーンショット
console.debug








console.dir(オブジェクト)

クロム ± ファイアバグ ± キツネ ± オペラ +

渡された値をJavascriptオブジェクトとして表示します(DOM要素の場合、すべての属性とメソッドが表示されます)。

%Oは、Chromeのconsole.logでも同様に機能します。

console.countと同様に、誰もがこのAPIメソッドを実装する独自のアプローチを持っています。

 console.dir(' '); console.dir([1,2]); console.dir({a:1}); console.dir([1,2],{a:1}); console.dir(document);
      
      



スクリーンショット
console.dir








console.dirxml(オブジェクト)

クロム ± ファイアバグ ± キツネ - オペラ ±

要素のXMLコードを表示します。

 console.dirxml(' '); console.dirxml([1,2]); console.dirxml({a:1}); console.dirxml(document); console.dirxml([1,2],{a:1});
      
      



スクリーンショット
console.dirxml








console.error(オブジェクト)

クロム + ファイアバグ ± キツネ ± オペラ ±

呼び出された場所のconsole.trace結果にもエラーが表示されます。

console.logのようにパターンがサポートされています

実装の違い:



知っておくことが重要です:

 console.error(); //   console.error('  '); console.error(' ', 12, true, [1,2,3], {a:1,b:2}); console.error('   %d %s',10,''); (function firstlevel () { (function secondlevel () { (function lastlevel () { console.error(' '); })(); })(); })(); console.error(new Error(' ')); //  
      
      



スクリーンショット
console.error








console.exception(エラーオブジェクト[、オブジェクト、...])

クロム - ファイアバグ ± キツネ - オペラ ±

呼び出された場所のtrace()結果にもエラーが表示されます。

最も物議を醸す方法の1つ:

 console.exception(); //   console.exception('  '); console.exception(' ', 12, true, [1,2,3], {a:1,b:2}); console.exception('   %d %s',10,''); (function firstlevel () { (function secondlevel () { (function lastlevel () { console.exception(' '); })(); })(); })(); console.exception(new Error(' ')); //  
      
      



スクリーンショット
console.exception










console.group(オブジェクト[、オブジェクト、...])

クロム + ファイアバグ + キツネ ± オペラ +

コンソールでエントリの新しい拡張グループを開きます。

console.logのようにサポートされるパターン

Firefoxでは、グループを折りたたんだり展開したりすることはできません。



console.groupCollapsed(オブジェクト[、オブジェクト、...])

クロム + ファイアバグ + キツネ - オペラ +

すぐに最小化された新しいグループを開きます。

Firefoxで-拡張グループを作成します。



console.groupEnd()

クロム + ファイアバグ + キツネ + オペラ +

開いているグループを閉じます。



 console.log('  '); console.group(); //   console.log('   '); console.group(' ', '', '', '', 12, true, [1,2,3], {a:1,b:2}); console.log('   '); console.group(' %c', 'color: red;'); console.log('   '); console.groupCollapsed(' '); console.log('   '); console.groupEnd(); console.log('   '); console.groupEnd(); console.log('   ');
      
      



スクリーンショット
console.group








console.info(オブジェクト[、オブジェクト、...])

クロム ± ファイアバグ + キツネ + オペラ +

わずかな視覚的変化を伴うログを表示します。

console.logのようにサポートされるパターン

 var a = ' '; console.info(a); console.info(' ', 12, true, [1,2,3], {a:1,b:2}); console.info('Node', document.getElementsByTagName('body')); console.info('DOM', document); console.info('', alert); console.info('', NaN, null, undefined); console.info('   %d %s',10,'');
      
      



スクリーンショット
console.info










console.profile([タイトル])

クロム + ファイアバグ + キツネ - オペラ -

Javascriptプロファイラーが含まれています。

コードプロファイリングは、どれだけ長く続くかを追跡するのに役立ちます。 便利なデバッグツール。



console.profileEnd()

クロム + ファイアバグ + キツネ - オペラ -

Javascriptプロファイラーをオフにします



 console.profile(); (function someFunction() { for (i=0;i<10000000;i++) {var s='a'; s+='a'; delete s;} })() console.profileEnd(); console.profile(" "); (function someFunction() { for (i=0;i<10000000;i++) {var s='a'; s+='a'; delete s;} })() console.profileEnd();
      
      



スクリーンショット
console.profile








console.table(データ[、列])

クロム ± ファイアバグ + キツネ - オペラ -

テーブルを表示します。

dataには配列または配列のようなオブジェクトが必要です。

オプションの引数を使用して、テーブル列に名前を付けたり、配列のようなオブジェクトの出力を柔軟に制御したりします。

(この機能は別の記事に値します。詳細については、公式ドキュメントの送付先をご覧ください。)

Chromeは、「配列[3]」、オブジェクトなどのテキストを置換することにより、複雑な値を表示できません。

 var table = []; table[0] = [1,'2',[1,2,3]]; table[1] = [document,document.getElementsByTagName('body'),window]; table[2] = [{a:1},null,alert]; console.table(table); function Person(firstName, lastName, age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } var family = {}; family.mother = new Person("", "", 32); family.father = new Person("", "", 33); family.daughter = new Person("", "", 5); family.son = new Person("", "", 8); console.table(family);
      
      



スクリーンショット
console.table










console.time(名前)

クロム ± ファイアバグ ± キツネ ± オペラ ±

新しいタイマーを作成し、それをnameにバインドします 。 この場合、 toString() **がnameに適用されます





console.timeEnd(名前)

クロム ± ファイアバグ ± キツネ ± オペラ ±

name.toString()に関連付けられているタイマーを停止し、 mithgolの修正に感謝して経過時間をコンソールに出力します



console.timeStamp(名前)

クロム - ファイアバグ ± キツネ - オペラ -

nameに渡されたテキストとともに現在のタイムスタンプを表示します。

コンソールはconsole.timeStamp()の行に遭遇するとエラーをスローします。 ChromeとFirefoxは単に無視されます。



 console.timeStamp(); console.time(' '); (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.time('  '); (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.timeEnd('  '); (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.timeEnd(' '); console.timeStamp(' '); console.time(12); (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.timeEnd(12); console.time(document.getElementsByTagName('script')); (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.timeEnd(document.getElementsByTagName('body')); console.time(1,2,3); //   (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.timeEnd(1,3,2); console.time(); //   (function someFunction() {for (i=0;i<1000000;i++) {var s='a'; s+='a'; delete s;}})() console.timeEnd(); console.timeStamp(' ');
      
      



Operaテストでは、timeStampの行をコメントアウトする必要がありました。
スクリーンショット
console.time








console.trace()

クロム + ファイアバグ + キツネ ± オペラ ±

このコードの実行につながったコールスタックを表示します(エラーメッセージを受信したときにも表示されます)。

引数を受け入れません。



 console.trace(); (function firstlevel () { (function secondlevel () { (function lastlevel () { console.trace(' '); })(); })(); })();
      
      





スクリーンショット
console.trace










console.warn(オブジェクト[、オブジェクト、...])

クロム + ファイアバグ + キツネ + オペラ +

console.infoと同様に、 console.logはいくつかの視覚的な変更とともに出力されます。

console.logのようにサポートされるパターン

 var a = ' '; console.info(a); console.info(' ', 12, true, [1,2,3], {a:1,b:2}); console.info('Node', document.getElementsByTagName('body')); console.info('DOM', document); console.info('', alert); console.info('', NaN, null, undefined); console.info('   %d %s',10,'');
      
      



スクリーンショット
console.warn








おわりに



コンソールは、Web開発者にとって非常に強力で便利なツールです。 少なくとも主なポイントを覚えておくことをお勧めします。





便利なリンク






*むしろ、FirebugがChromeよりも悪い方法でサポートするメソッドがあるため、「Common Console API」。

**この場合、 toStringにより、メソッドはdocument.getElementsByTagName( 'script')の呼び出しとdocument.getElementsByTagName( 'body')の呼び出しなどを区別しません。



All Articles