JavaScript数组可以为null吗?

时间:2013-01-27 12:34:56

标签: javascript

我正在收集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)

这是指数组

此代码位于Mozila

当然,我需要一个解释是将数组与null进行比较的逻辑,即使我知道“this”是指一个必须数组类型而不是变量可以是数组还是null?你的想法??

2 个答案:

答案 0 :(得分:4)

有人在没有上下文的情况下调用它时可能会发生这种情况,例Array.prototype.every(...)代替someArray.every(...)。或者更可能的情况:将someArray.every作为回调传递给其他函数,然后在没有正确的上下文的情况下调用它。

由于在没有提供上下文时该函数在Strict Mode this === undefined中运行。并undefined == null

答案 1 :(得分:2)

对于以下情况很有用:

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

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