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
错误,当typeof
没有返回字符串时,列出的平台上是否存在这种情况?
答案 0 :(得分:6)
简而言之,某些平台存在一个错误,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
上面列出的额外检查修复了错误。