Javascript 为什么typeof(/。/)!==';功能';用于下划线

Javascript 为什么typeof(/。/)!==';功能';用于下划线,javascript,underscore.js,Javascript,Underscore.js,我正在阅读函数的源代码,看到了这一行: if (typeof (/./) !== 'function') { 我不明白它为什么会在那里/./是一个正则表达式,它似乎总是具有类型对象。如果/./类型是函数,为什么不重新定义.isFunction?各种JavaScript引擎的某些版本允许调用RegExp,作为另一种使用方式: 而且,既然他们可以打电话 val的类型:对象(本机或主机,并实现[[调用]]) 结果:“函数” 但据我所知,当前版本不会表现出这种行为,并且会抛出TypeError。但是,

我正在阅读函数的源代码,看到了这一行:

if (typeof (/./) !== 'function') {

我不明白它为什么会在那里
/./
是一个正则表达式,它似乎总是具有类型
对象
。如果
/./
类型是
函数
,为什么不重新定义
.isFunction

各种JavaScript引擎的某些版本允许调用
RegExp
,作为另一种使用方式:

而且,既然他们可以打电话

val的类型:对象(本机或主机,并实现[[调用]])
结果:
“函数”


但据我所知,当前版本不会表现出这种行为,并且会抛出
TypeError
。但是,如果您关心向后兼容性,就像下划线一样,您可能需要检查它。

在这里回答:啊,那么检查是为了避免意外地考虑regex函数?美好的很好的问题,“为什么不定义u.isFunction”-它正在被重新定义。原始的toString()定义有两个块。@ruakh据我所知,它们应该成对出现——除非引擎使用alt of使其可调用。你知道一个例子吗?哦,对不起,我误读了Dogbert链接的答案,认为Firefox3.6.13使用了这样的引擎。所以我的上述评论(可能)是错误的;我会删除它。
var pattern = /./;

pattern('abc');
pattern.exec('abc');