web-dev-qa-db-ja.com

console.log()がalert()よりも優れていると見なされるのはなぜですか?

アプリケーションをデバッグするときは、JavaScriptのconsole.log()メソッドが、単にalert()メソッドを使用するよりも優先されるといつも言われています。どうしてこれなの?誰かがconsole.log()が明らかに良い選択である場所を私に指摘できる良い例はありますか?

23
Daniel Szabo
  • alert()はブロックしています
  • alert()は、デバッグ以外の環境では簡単に抑制できません。
  • consoleは通常、オブジェクトを適切にフォーマットし、オブジェクトをトラバースできるようにします
  • ロギングステートメントには、多くの場合、ロギングステートメントを発行したコードへのインタラクティブなポインタがあります
  • 一度に複数のalert()メッセージを表示することはできません
  • consolesは、直感的なフォーマットでさまざまなログレベルを持つことができます
36

これを試して:

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)
6
lonesomeday

どちらも、JSでその時点で何が起こっているかについての情報を取得するための単なる方法です。私はいつもalert()を使用していましたが、いくつかの理由でconsole.log()に移行しました。 (補足:コンソールはlog()だけではなく、他に何ができるかを見てください)。

Console.log()の主な利点は次のとおりです。

  • アラートのようにプロセスを停止することはありません
  • メッセージに行を入れなくても、どのスクリプトのどの行がログエントリをスローしたかを確認できます
  • デバッグしているものが複数ある場合は、アラートボックスで「OK」を押し続けるのが非常に面倒になる可能性があります。
  • オブジェクトをログに記録して、たくさんの良い情報を得ることができます(リマインダー、他の回答者に感謝します)

結局、それはあなたがどのようにデバッグすることを好むかに要約されます。

注意すべきことが1つあります。すべてのブラウザがconsole.log()をサポートしているわけではなく、console.log()呼び出しをコードに残しておくと問題が発生します。その問題を回避するためのコンソールが利用できない場合は、コンソールスタブを提供します。

4
greenanvil

これは非ブロッキングであり、オブジェクトを詳細に調べることができます(オブジェクトをtoString()した結果を確認するだけではありません)。

3
Quentin

Javascriptの実行を再開する前に、alertを閉じる必要があります。 console.logそのような問題はありません。

console.logは、値を含むオブジェクトも表示します。alertを呼び出すには、最初にオブジェクトをトラバースする必要があります。

2
Oded

デバッグアラートステートメントを削除するのを忘れると、エンドユーザーに直接影響します。
debuggins console.logステートメントを削除するのを忘れても、ユーザーは影響を受けません。
さらに、console.logを使用すると、JavaScriptのtoString()表現の代わりに、オブジェクトの完全なコンテンツを表示できます。

1
John Hartsock

好みの問題だと思いますが、console.logを使用することにはいくつかの利点があります。

  • 20の異なるものをログに記録したいとします。これは、アラートで非常に煩わしいでしょう。
  • たとえば、オブジェクトをログに記録してから、それらを検査できます。
  • たとえば、Chrome開発ツールでは、異なるページ間でログを保持できます。
  • ノンブロッキングです
  • 忘れてもエンドユーザーには影響しません

いくつか例を挙げると。

1

アラートはPITAであるため、入力が行われるまですべてを停止し、オブジェクトのイントロスペクションを許可しないでください。

状況によっては、デバッガーの使用がさらに優れています。

0
Dave Newton

alert()は、console.log()がメッセージをコンソールに出力する間、メッセージが閉じられるまでブラウザとのすべての対話を停止します。

例一連の変数の値を出力して、それらが正しいことを確認し、各変数の後にアラートウィンドウを閉じたくないことを確認します。

0
Firenze