3

ECMAScript 5 が登場してからしばらく経ち、最新のブラウザー (IE9、CH 19 以降、FF 4 以降) で十分にサポートされており、「不変の未定義」も同様です。「未定義」が次のように渡されるのを見続けていますが:

(function ( ..., undefined ) {

})(...);

私が言えることから、Crockford の JSLint ツールはあまり好きではありません。

Expected an identifier and instead saw 'undefined' (a reserved word).

渡されていなくても(関数呼び出しに引数はありません)、実際には識別子です。彼のツールは死ぬまで従うべきバイブルではないことは理解していますが、一方でJSHintはそれを気にしていないようです。

これは現在でもベスト プラクティスと見なされていますか? また、コードのパフォーマンスやセキュリティにどのような影響がありますか? ブラウザーのサポート >= IE9 を検討しています。

4

2 に答える 2

3

これは現在でもベスト プラクティスと見なされていますか? また、コードのパフォーマンスやセキュリティにどのような影響がありますか? ブラウザーのサポート >= IE9 を検討しています。

とよく似undefinedており、Infinityのようなリテラルではなく、グローバル オブジェクトの書き込み不可のプロパティであるnullため、エラーを発生させずにパラメーター名として使用できます。このような関数を考えてみましょう

function example(Infinity) {
    return Infinity;
}

ではexampleInfinityは書き込み不可のプロパティではなくなり、代わりに function の他のパラメーターと同じように機能undefinedし、何も渡されていないかのように初期化されるか、引数の値を取得します。これは、この関数ではInfinityInfinityを意味すると仮定することはできないことを意味します。undefined

では、問題に戻りましょうundefined。意味が同じままになるように初期化されundefinedますが、関数内での不変性が失われたため、値を割り当てるタイプミスがあるundefinedと、このエラーが繰り越されます。また、関数にパラメータが渡された場合、最初から値が異なります。

したがって、結論として、undefinedこれはセキュリティに影響を与えます。これは、不変のステータスを失い、変更できるため、「安全」ではなくなったためです。


undefinedは実際には予約 ではないことに注意してください。互換性のためにが必要な場合はundefined、パラメーター名として追加するのではなく、単純なvar undefined;を関数の先頭または不変のグローバル名前空間で使用することをお勧めします。var undefined; undefined = 1; undefined; // undefined

于 2013-01-28T17:22:05.197 に答える
0

jsLintに準拠したい場合は、 の代わりに予約語ではない別の変数を使用できますundefined以下はjsLintに準拠しています。

(function (window, document, undef) {
    'use strict';

}(window, document));

ただし、新しく定義した変数 (この場合undefは の代わりにundefined) を使用することを忘れないでください。上記の厳密モードは、jsLint に準拠するために追加されました。 これは主に、未定義であることをテストしている変数が実際には未定義であることを確実に知るために使用されます。

jsLint Web サイトで提供されているテキスト領域でこの例を実行している場合は、 windowとを定義する必要がある場合があることに注意してくださいdocument。そうするまで、2つのエラーが発生していました。

var window = window; //global window object
var document = document; //global window object

ただし、私は次のように考えています。

(function (..., undefined) {
    'use strict';

}(...));

完全に問題なく、さらに重要なことに、強くお勧めします。

予約語は通常の状態から変更できる場合があります。に設定undefinedするtrueなど。ポール アイリッシュは、彼のビデオでこれについて簡単に説明しています: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/

于 2013-01-28T17:26:22.893 に答える