在 Fabric.js 中,您会看到很多地方将代码块包含在格式的条件检查中:
if (!Array.prototype.indexOf) {}
或者
if (!Array.prototype.forEach) {}
等等
结果不总是假的吗?为什么要检查方法的布尔值?
谢谢。
在 Fabric.js 中,您会看到很多地方将代码块包含在格式的条件检查中:
if (!Array.prototype.indexOf) {}
或者
if (!Array.prototype.forEach) {}
等等
结果不总是假的吗?为什么要检查方法的布尔值?
谢谢。
它正在检查该方法是否存在。如果它不存在,它会存在undefined
,所以它会做!undefined
,导致true
.
如果代码不存在,我会假设代码正在引入垫片。
当未定义函数时,这些测试通过。
旧浏览器没有这些功能。这就是为什么他们正在测试他们的存在。
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;
}
}