web-dev-qa-db-ja.com

window.console.logとconsole.logの違いは何ですか

ただインタビューを受けました。最初の質問は、console.log()とは何かという質問でした。私はとても自信を持って答えました。再び、

2番目の質問は、window.console.log()console.log()の違いは何ですか。私は言葉を失いました。 GoogleとStack Overflowで検索してみました。それらの違いを理解するのに役立つ記事は見つかりませんでした。

どんな考えでも大歓迎です。

32
Santosh

通常のブラウザコンテキストでは、違いはありません。 consoleはグローバル変数であり、すべてのグローバルはwindowオブジェクトのプロパティです。

console.log(console.log==window.console.log) // true

ブラウザで実行されていない場合や、コンソール変数が再割り当てされた場合など、いくつかの注意事項があります。 T.J。Crowder はそれをうまく説明しています。

38
Scimonster

デフォルトのブラウザJavaScript環境では、実質的にはありません提供windowおよびconsoleはシャドウ化または再割り当てされていません。

デフォルトのブラウザJavaScript環境では、windowはグローバルであり、グローバルオブジェクトはウィンドウオブジェクトでもあります。グローバルオブジェクトは、ほとんどのグローバルをプロパティとして保持します(以前はすべてでしたが、変更されたES2015では、letconst、またはclassによって作成されたグローバルは、グローバルオブジェクト)。ただし、ほとんどの非ブラウザー環境(たとえば、NodeJSはglobalの代わりにwindowを使用します)や、デフォルト以外のブラウザー環境(Webワーカーの環境など)ウィンドウにアクセスできないため、windowはありません)。したがって、windowが定義されていない環境では、_window.console.log_が定義されない場合(環境がグローバルconsoleを提供する場合)、_console.log_は失敗します。

違いを理解するために、それぞれを見てみましょう:

console.log(...)の意味:

  1. JavaScriptエンジンは、識別子consoleのバインディングを、現在の実行コンテキストで開始し、次の実行コンテキスト、次にグローバルスコープで見つかるまで検索する必要があります。
  2. 次に、結果のオブジェクトのlogプロパティを検索します。
  3. それからそれを呼ぶ

window.console.log(...)の意味:

  1. JavaScriptエンジンは、識別子windowのバインディングを、現在の実行コンテキストで開始し、次の実行コンテキスト、次にグローバルスコープで見つかるまで検索する必要があります。
  2. 次に、結果のオブジェクトのconsoleプロパティを検索します。
  3. 次に、結果のオブジェクトのlogプロパティを検索します。
  4. それからそれを呼ぶ

したがって、たとえば、consoleがシャドウされているため、_console.log_は機能しますが、_window.console.log_は機能します。

_function foo() {
  var console = 42;
  
  try {
    console.log("You WON'T see this.");
  } catch (e) {
  }

  try {
    window.console.log("You WILL see this.");
  } catch (e) {
  }
}
foo();_
35
T.J. Crowder

_console.log_と_window.console.log_の間に違いはありません。 [〜#〜] mdn [〜#〜] を確認してください。彼らは明らかに引用-

Consoleオブジェクトには、プロパティコンソールを介して、グローバルオブジェクト、ブラウズスコープのウィンドウ、WorkerGlobalScope、およびワーカー内の特定のバリアントからアクセスできます。 _Window.console_として公開されており、単にconsoleとして参照できます。



これに加えて、質問はまたあったかもしれない-

_console.log_と_window.console_の違いは何ですか?

これに対する答えは

_console.log_は(ご存じのように)ロギングに使用されます。

_window.console_は、次にログインできるようにコンソールが使用可能かどうかを確認します(truthy値)。(モバイルブラウザの場合、デバッガ/コンソールはサポートされません)

このためのコードの一般的なパターンは

window.console && console.log(open_date);

これは基本的に短いコードです-

_if( window.console ) {
    console.log( open_date );
}
_
2
bozzmob