Web開発者の常識は、未定義の変数は未定義でなければならないことを示唆しています-そのため、 何かの変数がjavascriptで定義されていない場合(そして、もちろん、定義されていない奇妙な定義がない場合)、 Something
ただし、Opera 11(
これをより明確にするために、 Underscore.jsライブラリを使用します。このライブラリには、不定変数をテストするための便利な関数があります。これは
// Is a given variable undefined? _.isUndefined = function(obj) { return obj === void 0; };
また、 Underscore.jsライブラリは独自のページ
Dragonflyコンソールで3つのテストを行うだけで、生きた恐怖の深みに触れることができます。
このスクリーンショットには何が表示されていますか?
最初に、 _。isUndefined(undefined)をチェックし、
次に、
そして最後に
Dragonflyコンソールの場合、そのような厳密さとバグを探す意欲は依然として正常です。 全体的な問題は、OperaがWebページ上のJavaScriptにまったく同じ標準でアプローチするため、 Underscore.jsライブラリの
typeof == 'undefined' // _.isUndefined(window.) // !
この問題を回避するには、このエレガントでミニチュアの松葉杖のようなものを作成する必要があります。
_.isUndef = function(name){ return _.isUndefined(window[name]); };
この後、グローバル変数の不確実性のチェックがエラーのない短い形式になることを比較して確認できます。
_.isUndefined() // Opera! _.isUndef('') // };
これまでOperaについて説明してきましたが、問題はOperaブラウザーよりもはるかに広いことを理解しています。 たとえば、同じことがNode.JSエンジンの特徴であることを示すのは簡単です。
上記の松葉杖の類似物は未定義のグローバル変数の検証をサポートできることは明らかであり、この場合、ノードでは通常のように、その中のグローバルオブジェクトのみが
V8エンジンを使用してJavaScriptを解釈する他のアプリケーションで未定義のグローバル変数を操作する場合、同様の効果が期待できると強く思います。 コメントでは、 TheShockはGoogle Chromeがそれらのアプリケーションの1つであると言っています。
また、Firefox
<!doctype html> <script> isUndefined = function(i){ return i === void 0; } main = function(){ document.getElementById('b').innerHTML = isUndefined(whatever); } </script> <body id="b" onload="main();"> </body> </html>
どこでも、どこでも不明確なグローバル変数は、関数のパラメーターとして使用する前にチェックする必要があります。