1

同じページから参照される別のスクリプト ファイルによって作成されたオブジェクトに依存するコードを書いているとき、何かグローバル変数の存在をテストしなければならないことがよくあります。

それを行うための論理的なイディオムは次のようになると思います。

if (window.myLibrary) myLibrary.someFunction();

ただし、stackoverflow に関するいくつかの調査の後、コンセンサスは、正しいイディオムは次のように思われます。

if (typeof myLibrary != "undefined") myLibrary.someFunction();

このイディオムは、stackoverflow に関するいくつかの回答で示されています。最も顕著な例は次のとおりです。

変数がJavaScriptで定義されているかどうかを確認するにはどうすればよいですか

ただし、2 番目のバージョンが望ましい理由についての説明は見つかりません。そのためのすべての推奨事項は、「これを使用する」という形式になっています。window オブジェクトのプロパティとしてオブジェクトを参照することにより、オブジェクトをチェックするよりも typeof 演算子を使用する方が優れている理由を誰か説明してもらえますか?

4

2 に答える 2

4

myLibrary は存在する可能性がありますが、0 または false に設定されている可能性があります。この場合、最初の例では、myLibrary がまったく存在しないと想定されます。

于 2013-05-17T14:53:33.613 に答える
3

誰かがライブラリを「true」またはそれに似たものに設定する本当にやむを得ない理由がない限り、私は最初の例に行く傾向があります。はい、コードが他の誰かの環境で実行されている場合 (つまり、JQuery のような公開 Javascript フレームワークを構築している場合)、誰かがライブラリを悪用していないことを確認するために、型チェックでできるだけ安全にしたい場合があります。しかし、私の見解では、Javascript での完全なタイプ セーフはそれほど重要ではなく、すべてのコードが非常に冗長になり、場合によっては読みにくくなります。

リンクされた質問からの回答も気に入りました。あなたが使用することができます

if ('myLibrary' in window)

あくまでも好みだと思います。明確にするために、window.myLibrary が「false」であっても true と評価されるため、基本的に、それがまったく定義されているかどうかを確認することになります。

于 2013-05-17T15:00:14.383 に答える