スクリプトがWebブラウザー内のWebページで実行されているかどうかを確認するのは、慣用的なチェックです。
JavaScriptは本来設計されたものであるため、JavaScriptはWebページでのみ実行されると考えられるかもしれませんが、これは真実ではありません。JavaScriptは、Node.jsまたはIISでサーバー側コードを記述するためにも使用できる多目的言語ですActive Server Pages(1996年以降)、または内部 "web worker" 。これは、バックグラウンドで実行されるWebページのスクリプトです。
Webページには、window
などの他の組み込みオブジェクトがいくつかあります。他の環境(Node.jsなど)にはwindow
はありませんが、console
(さて、console
は現在ほとんどのブラウザに存在していますが、もともとはありませんでした)。
たとえば、異なるコンテキストでは、スクリプトのグローバルスコープで異なるオブジェクトを使用できます(このリストは完全ではありません)。
Math
およびDate
Object
、Number
、Function
、String
など(組み込み型を表すオブジェクト)など<script>
タグ内):Window
(インターフェース)はwindow
グローバルオブジェクトとして公開されます。これは、グローバルisでもあるオブジェクトですスコープ(グローバルスコープでvar foo
を宣言すると、実際にプロパティwindow.foo
!が作成されます)document
グローバルオブジェクトは実際にはwindow.document
プロパティにアクセスしています。window
グローバルオブジェクトやdocument
やnavigator
などのプロパティはありませんが、次のような他のグローバルオブジェクトを取得します:console
process
exports
window
オブジェクトもないため、グローバルスコープはWindowOrWorkerGlobalScope
オブジェクトであり、次のようなプロパティを介してオブジェクトを公開します。caches
indexedDB
Origin
response
(応答ストリームへの書き込み用)request
(着信HTTPリクエストからの読み取り用)Application
およびSession
(リクエスト間でデータを保持するため)WScript
グローバルオブジェクトは、スクリプトホストから機能を公開します。window
オブジェクトは通常のブラウザーJSに存在するが存在しないため、これを使用して、コードが通常のブラウザー環境(ブラウザーDOMのある環境など)で実行されているか、他のJS環境で実行されているかを検出できます。 node.jsのようなもの、またはブラウザーのwebWorker.
window
オブジェクトが存在しない場合、
typeof window === 'undefined'
だからあなたが尋ねたコード:
if (typeof window !== 'undefined')
if
オブジェクトがトップレベルの変数として存在する場合、window
ブロックを実行します。
リンクした特定のコードで、プラグインがブラウザー以外の環境で使用された場合、document
などのDOMオブジェクトを参照するブラウザーターゲットコードを実行しないようにします。