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

前端之家收集整理的这篇文章主要介绍了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

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

原文链接:https://www.f2er.com/js/157974.html

猜你在找的JavaScript相关文章