Underscore.js,为什么`isFunction`使用`|| false`?

7
在Underscore.js(定义的存储库链接)中,isFunction(object)的可选覆盖如下所示:
// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
// IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
var nodelist = root.document && root.document.childNodes;
if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
    _.isFunction = function(obj) {
        return typeof obj == 'function' || false;
    };
}

我困惑的是在字符串比较后为什么需要 || false。由于 typeof 总是返回一个字符串,所以不应该有任何歧义。
注释说明这个覆盖修复了一些 typeof 的错误,是否存在在列出的平台上 typeof 不返回字符串的情况?
1个回答

6
请参阅评论中涵盖的问题,#1621#1929#2236
简而言之,某些平台存在一个错误,除非将其存储在变量中,否则typeof不是字符串。 || false解决了此问题,而不会引入额外的变量。
直接从#1621中获取:在IE8中,有一个变量一切都正常运行。
var t = typeof obj
t === 'function' // false
t === 'object' // true

但是没有一个,情况就不同了:

(typeof obj) === 'function' // true, but SHOULD be false
(typeof obj) === 'object' // true

上述额外检查修复了该错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接