ただインタビューを受けました。最初の質問は、console.log()
とは何かという質問でした。私はとても自信を持って答えました。再び、
2番目の質問は、window.console.log()
とconsole.log()
の違いは何ですか。私は言葉を失いました。 GoogleとStack Overflowで検索してみました。それらの違いを理解するのに役立つ記事は見つかりませんでした。
どんな考えでも大歓迎です。
通常のブラウザコンテキストでは、違いはありません。 console
はグローバル変数であり、すべてのグローバルはwindow
オブジェクトのプロパティです。
console.log(console.log==window.console.log) // true
ブラウザで実行されていない場合や、コンソール変数が再割り当てされた場合など、いくつかの注意事項があります。 T.J。Crowder はそれをうまく説明しています。
デフォルトのブラウザJavaScript環境では、実質的にはありません提供window
およびconsole
はシャドウ化または再割り当てされていません。
デフォルトのブラウザJavaScript環境では、window
はグローバルであり、グローバルオブジェクトはウィンドウオブジェクトでもあります。グローバルオブジェクトは、ほとんどのグローバルをプロパティとして保持します(以前はすべてでしたが、変更されたES2015では、let
、const
、またはclass
によって作成されたグローバルは、グローバルオブジェクト)。ただし、ほとんどの非ブラウザー環境(たとえば、NodeJSはglobal
の代わりにwindow
を使用します)や、デフォルト以外のブラウザー環境(Webワーカーの環境など)ウィンドウにアクセスできないため、window
はありません)。したがって、window
が定義されていない環境では、_window.console.log
_が定義されない場合(環境がグローバルconsole
を提供する場合)、_console.log
_は失敗します。
違いを理解するために、それぞれを見てみましょう:
console.log(...)
の意味:
console
のバインディングを、現在の実行コンテキストで開始し、次の実行コンテキスト、次にグローバルスコープで見つかるまで検索する必要があります。log
プロパティを検索します。window.console.log(...)
の意味:
window
のバインディングを、現在の実行コンテキストで開始し、次の実行コンテキスト、次にグローバルスコープで見つかるまで検索する必要があります。console
プロパティを検索します。log
プロパティを検索します。したがって、たとえば、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();
_
_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 );
}
_