可选覆盖isFunction(object)
在下划线.js (存储库链接到定义),内容如下:
// 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
不返回字符串?
查看评论中涉及的问题,#1621, #1929 and #2236.
简而言之,某些平台存在一个错误typeof
除非将其存储在变量中,否则不是字符串。
The || 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
上面概述的额外检查修复了该错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)