为什么typeof(/./)!=='function'在下划线中使用

时间:2013-07-11 17:45:51

标签: javascript underscore.js

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

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

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

1 个答案:

答案 0 :(得分:16)

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

var pattern = /./;

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

而且,因为它们是 Callable typeof considered them functions

  

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

据我所知,当前版本不会出现此行为,并会抛出TypeError。但是,如果您关注向后兼容性,如Underscore,则可能需要检查它。