アプリケーションをデバッグするときは、JavaScriptのconsole.log()
メソッドが、単にalert()
メソッドを使用するよりも優先されるといつも言われています。どうしてこれなの?誰かがconsole.log()
が明らかに良い選択である場所を私に指摘できる良い例はありますか?
alert()
はブロックしていますalert()
は、デバッグ以外の環境では簡単に抑制できません。console
は通常、オブジェクトを適切にフォーマットし、オブジェクトをトラバースできるようにしますalert()
メッセージを表示することはできませんconsole
sは、直感的なフォーマットでさまざまなログレベルを持つことができますこれを試して:
var data = {a: 'foo', b: 'bar'};
console.log(data);
alert(data);
console.log
はオブジェクトを表示し、alert
は[object Object]
を表示しますが、これは役に立ちません。これは、たとえば、要素:
alert(document.body); // [object HTMLBodyElement] (exact result depends on your browser)
どちらも、JSでその時点で何が起こっているかについての情報を取得するための単なる方法です。私はいつもalert()を使用していましたが、いくつかの理由でconsole.log()に移行しました。 (補足:コンソールはlog()だけではなく、他に何ができるかを見てください)。
Console.log()の主な利点は次のとおりです。
結局、それはあなたがどのようにデバッグすることを好むかに要約されます。
注意すべきことが1つあります。すべてのブラウザがconsole.log()をサポートしているわけではなく、console.log()呼び出しをコードに残しておくと問題が発生します。その問題を回避するためのコンソールが利用できない場合は、コンソールスタブを提供します。
これは非ブロッキングであり、オブジェクトを詳細に調べることができます(オブジェクトをtoString()
した結果を確認するだけではありません)。
Javascriptの実行を再開する前に、alert
を閉じる必要があります。 console.log
そのような問題はありません。
console.log
は、値を含むオブジェクトも表示します。alert
を呼び出すには、最初にオブジェクトをトラバースする必要があります。
デバッグアラートステートメントを削除するのを忘れると、エンドユーザーに直接影響します。
debuggins console.logステートメントを削除するのを忘れても、ユーザーは影響を受けません。
さらに、console.logを使用すると、JavaScriptのtoString()表現の代わりに、オブジェクトの完全なコンテンツを表示できます。
好みの問題だと思いますが、console.logを使用することにはいくつかの利点があります。
いくつか例を挙げると。
アラートはPITAであるため、入力が行われるまですべてを停止し、オブジェクトのイントロスペクションを許可しないでください。
状況によっては、デバッガーの使用がさらに優れています。
alert()は、console.log()がメッセージをコンソールに出力する間、メッセージが閉じられるまでブラウザとのすべての対話を停止します。
例一連の変数の値を出力して、それらが正しいことを確認し、各変数の後にアラートウィンドウを閉じたくないことを確認します。