微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐