web-dev-qa-db-ja.com

ifの目的は何ですか(typeof window!== 'undefined')

電話する目的は何ですか

if (typeof window !== 'undefined') 

JSPM plugin-css やその他のライブラリで見ました。

20
YiFeng

スクリプトがWebブラウザー内のWebページで実行されているかどうかを確認するのは、慣用的なチェックです。

JavaScriptは本来設計されたものであるため、JavaScriptはWebページでのみ実行されると考えられるかもしれませんが、これは真実ではありません。JavaScriptは、Node.jsまたはIISでサーバー側コードを記述するためにも使用できる多目的言語ですActive Server Pages(1996年以降)、または内部 "web worker" 。これは、バックグラウンドで実行されるWebページのスクリプトです。

Webページには、windowなどの他の組み込みオブジェクトがいくつかあります。他の環境(Node.jsなど)にはwindowはありませんが、console(さて、consoleは現在ほとんどのブラウザに存在していますが、もともとはありませんでした)。

たとえば、異なるコンテキストでは、スクリプトのグローバルスコープで異なるオブジェクトを使用できます(このリストは完全ではありません)。

  • すべてのJavaScriptコンテキストで、次のようなオブジェクトの標準セットを使用できます。
    • MathおよびDate
    • ObjectNumberFunctionStringなど(組み込み型を表すオブジェクト)など
  • Webページのスクリプト内<script>タグ内):
    • Window(インターフェース)はwindowグローバルオブジェクトとして公開されます。これは、グローバルisでもあるオブジェクトですスコープ(グローバルスコープでvar fooを宣言すると、実際にプロパティwindow.foo!が作成されます)
    • したがって、documentグローバルオブジェクトは実際にはwindow.documentプロパティにアクセスしています。
  • Node.jsサーバー側スクリプト内
    • Node.jsはDOMを備えたウェブブラウザではないため、windowグローバルオブジェクトやdocumentnavigatorなどのプロパティはありませんが、次のような他のグローバルオブジェクトを取得します:
    • console
    • process
    • exports
  • WebページのWebワーカースクリプト内
    • Webワーカーにはwindowオブジェクトもないため、グローバルスコープはWindowOrWorkerGlobalScopeオブジェクトであり、次のようなプロパティを介してオブジェクトを公開します。
    • caches
    • indexedDB
    • Origin
  • IIS(VBScriptの代わりに)JScriptを使用したActive Server Pages):
    • response(応答ストリームへの書き込み用)
    • request(着信HTTPリクエストからの読み取り用)
    • ApplicationおよびSession(リクエスト間でデータを保持するため)
  • Microsoft Windowsのシェルスクリプトホスト
    • WScriptグローバルオブジェクトは、スクリプトホストから機能を公開します。
18
Dai

windowオブジェクトは通常のブラウザーJSに存在するが存在しないため、これを使用して、コードが通常のブラウザー環境(ブラウザーDOMのある環境など)で実行されているか、他のJS環境で実行されているかを検出できます。 node.jsのようなもの、またはブラウザーのwebWorker.

windowオブジェクトが存在しない場合、

typeof window === 'undefined'

だからあなたが尋ねたコード:

if (typeof window !== 'undefined') 

ifオブジェクトがトップレベルの変数として存在する場合、windowブロックを実行します。

リンクした特定のコードで、プラグインがブラウザー以外の環境で使用された場合、documentなどのDOMオブジェクトを参照するブラウザーターゲットコードを実行しないようにします。

12
jfriend00