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 举报,一经查实,本站将立刻删除。