2

我正在收集使其与旧浏览器兼容的 JavaScript 类原型,没关系,但我在收集它们时想知道的是,Mozila 的开发人员将数组与 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的这段代码

请我解释一下,即使我知道“this”指的是必须数组类型而不是变量,也可以将数组与空值进行比较的逻辑可以是数组或空值?你认为呢 ??

4

2 回答 2

4

当有人在没有上下文的情况下调用它时可能会发生这种情况,例如,Array.prototype.every(...)而不是someArray.every(...). 或更可能的情况:someArray.every作为回调传递给其他函数,然后在没有适当上下文的情况下调用它。

由于该函数在未提供上下文时以严格模式运行。 this === undefinedundefined == null

于 2013-01-27T12:41:07.843 回答
2

它对以下情况很有用:

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

您不太可能遇到该版本的代码,但null可以是一个尚未初始化的变量来代替。在那种情况下TypeError是唯一合乎逻辑的。

于 2013-01-27T12:39:08.033 回答