我正在阅读_.isFunction()
函数的来源,并看到了这一行:
if (typeof (/./) !== 'function') {
我不明白为什么会这样。 /./
是一个似乎总是具有object
类型的正则表达式。如果_.isFunction
类型为/./
,为什么function
不会重新定义?
答案 0 :(得分:16)
某些版本的各种JavaScript引擎允许调用 RegExp
作为使用.exec()
的另一种方式:
var pattern = /./;
pattern('abc');
pattern.exec('abc');
而且,因为它们是 Callable ,typeof
considered them function
s:
val的类型:对象(本机或主机,并实现[[Call]])
结果:"function"
据我所知,当前版本不会出现此行为,并会抛出TypeError
。但是,如果您关注向后兼容性,如Underscore,则可能需要检查它。