javascript – Underscore.js,为什么`isFunction`使用`|| FALSE`?

Underscore.js( repo link to definition)中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没有返回字符串时,列出的平台上是否有案例?

解决方法

请参阅注释 #1621,#1929#2236中涵盖的问题.

简而言之,一些平台有一个bug,其中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

上面列出的额外检查修复了错误.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...