0

在 Fabric.js 中,您会看到很多地方将代码块包含在格式的条件检查中:

if (!Array.prototype.indexOf) {}或者

if (!Array.prototype.forEach) {}等等

结果不总是假的吗?为什么要检查方法的布尔值?

谢谢。

4

2 回答 2

2

它正在检查该方法是否存在。如果它不存在,它会存在undefined,所以它会做!undefined,导致true.

如果代码不存在,我会假设代码正在引入垫片。

于 2012-10-30T16:32:43.153 回答
2

当未定义函数时,这些测试通过。

旧浏览器没有这些功能。这就是为什么他们正在测试他们的存在。

MDN 给出了该测试的相同示例(经典),用于定义 array.indexOf 的替换函数(适用于版本 9 之前的 IE):

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
        "use strict";
        if (this == null) {
            throw new TypeError();
        }
        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0) {
            return -1;
        }
        var n = 0;
        if (arguments.length > 1) {
            n = Number(arguments[1]);
            if (n != n) { // shortcut for verifying if it's NaN
                n = 0;
            } else if (n != 0 && n != Infinity && n != -Infinity) {
                n = (n > 0 || -1) * Math.floor(Math.abs(n));
            }
        }
        if (n >= len) {
            return -1;
        }
        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
        for (; k < len; k++) {
            if (k in t && t[k] === searchElement) {
                return k;
            }
        }
        return -1;
    }
}
于 2012-10-30T16:32:52.537 回答