Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';是否使用typeof检测函数?_Javascript_Underscore.js - Fatal编程技术网

Javascript 为什么';是否使用typeof检测函数?

Javascript 为什么';是否使用typeof检测函数?,javascript,underscore.js,Javascript,Underscore.js,以下是相关代码: // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { _['is' + name] = function(obj) {

以下是相关代码:

// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
    _['is' + name] = function(obj) {
      return toString.call(obj) === '[object ' + name + ']';
    };
  });
我可以理解为什么在其他情况下使用toString,但是

typeof function(){}

将返回
函数

是否有我遗漏的用例


在这种情况下,typeof应该更快、更准确。

下划线使用一致的方法,以避免微观优化,提高可读性和可压缩性


为了几微秒而不同地处理
.isFunction
是没有意义的,除非
.isFunction
是实际代码中的实际瓶颈。

下划线使用一致的方法,以避免微观优化并提高可读性和可压缩性


为了几微秒的时间而对
.isFunction
进行不同的处理是没有意义的,除非
.isFunction
是实际代码中的一个实际瓶颈。

更快,是的,但在实践中它并不那么准确。

尽管在大多数情况下,
typeof obj===“function”
都能正常工作,一些浏览器在边缘情况下会做一些奇怪的事情,尤其是在本机对象上。(它们真的很奇怪,但它们确实存在):比如包含插件对象的元素等等。最终的结果是,很少有对象/浏览器组合会在几种情况下出错:当使用
typeof
时,它们要么在不应该检测时检测为函数,要么在应该检测时不检测为函数


对于大多数代码来说,这并不重要。就像我说的,我们这里讨论的是边缘案例。但是像下划线这样的库在边缘情况下不能出错:它们需要确保在任何情况下都正确,即使浏览器出错。不管出于什么原因,即使浏览器的
typeof
错误,它们似乎都得到了
Object.prototype.toString(obj)
正确的结果所以下划线使用了这个技巧,因为它是最简单的方法,在任何地方都适用。它还与
Array
这样的情况很好地吻合,在这种情况下,您必须使用这种方法,因为
typeof
只是简单地不起作用。

是的,速度更快,但在实践中却不太准确。

尽管在大多数情况下,
typeof obj===“function”
都能正常工作,一些浏览器在边缘情况下会做一些奇怪的事情,尤其是在本机对象上。(它们真的很奇怪,但它们确实存在):比如包含插件对象的元素等等。最终的结果是,很少有对象/浏览器组合会在几种情况下出错:当使用
typeof
时,它们要么在不应该检测时检测为函数,要么在应该检测时不检测为函数


对于大多数代码来说,这并不重要。就像我说的,我们这里讨论的是边缘案例。但是像下划线这样的库在边缘情况下不能出错:它们需要确保在任何情况下都正确,即使浏览器出错。不管出于什么原因,即使浏览器的
typeof
错误,它们似乎都得到了
Object.prototype.toString(obj)
正确的结果所以下划线使用了这个技巧,因为它是最简单的方法,在任何地方都适用。它还与
Array
等情况很好地吻合,在这些情况下,您必须使用此方法,因为
typeof
只是简单的不起作用。

下划线不一定以速度为目标。在这种情况下,只需将
函数
名称添加到类型列表中就更简单了。当
typeof
应用于RegExp对象和一些主机对象时,一些旧浏览器中存在错误,错误地返回
“Function”
是一个根据类型划分的对象,分数不一定以速度为目标。在这种情况下,只需将
函数
名称添加到类型列表中就更简单了。当
typeof
应用于RegExp对象和一些主机对象时,一些旧浏览器中存在错误,错误地返回
“Function”
是一个根据typeofwhat关于前面提到并删除的框架问题的对象,这是无效的吗?@www.arcmarks.com,删除(不正确的)答案是有原因的。因此,我认为答案更多,因此在某些正则表达式浏览器中会失败。这与array和null的错误行为模式相匹配。那么前面提到并删除的框架问题呢?这是无效的吗?@www.arcmarks.com,删除(不正确的)答案是有原因的。因此,我认为答案更多,因此在某些正则表达式浏览器中会失败。这也符合数组和null的错误行为模式。
typeof new Function()