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 に答える