2

古いブラウザーと互換性を持たせるJavaScriptクラスのプロトタイプを収集しています。それは気にしませんが、それらを収集しているときに、Mozillaの開発者が配列をnullと比較していることを不思議に思っています。その説明ですか???

 if (!Array.prototype.every) {
    Array.prototype.every = function(fun /*, thisp */) {
        "use strict";

        if (this == null)
            throw new TypeError();

        var t = Object(this);
        var len = t.length >>> 0;
        if (typeof fun != "function")
            throw new TypeError();

        var thisp = arguments[1];
        for (var i = 0; i < len; i++) {
            if (i in t && !fun.call(thisp, t[i], i, t))
                return false;
        }

        return true;
    };
}

この行で

 if (this == null)

これは配列を指します

Mozillaのこのコード

親切に説明が必要なのは、変数ではなく配列型を参照する「これ」が配列またはnullになる可能性があることを知っていても、配列をnullと比較するロジックであるということです?? あなたが思うこと ??

4

2 に答える 2

4

誰かがコンテキストなしで呼び出した場合に発生する可能性がArray.prototype.every(...)ありsomeArray.every(...)ます。someArray.everyまたは、より可能性の高いケース:適切なコンテキストなしで呼び出す他の関数へのコールバックとして渡す。

コンテキストが提供されていない場合、関数は厳密モードで実行されているためです。 this === undefinedそしてundefined == null

于 2013-01-27T12:41:07.843 に答える
2

次のような場合に役立ちます。

Array.prototype.every.call(null, ...);

そのバージョンのコードを満たす可能性は低いですが、代わりにnull、たとえばまだ初期化されていない変数を使用できます。その場合TypeErrorは論理的です。

于 2013-01-27T12:39:08.033 に答える