17

我正在阅读该_.isFunction()函数的源代码并看到了这一行:

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

我不明白为什么它在那里。/./是一个似乎总是具有类型的正则表达式object。如果type 是 a ,为什么不_.isFunction重新定义/./function

4

1 回答 1

16

各种 JavaScript 引擎的某些版本允许调用 RegExp作为另一种使用方式.exec()

var pattern = /./;

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

而且,由于它们是Callable,因此typeof将它们视为functions

val 类型:对象(本机或主机,并实现 [[Call]])
结果:"function"

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

于 2013-07-11T17:52:04.123 回答