Javascript 为什么';你不能验证它的功能吗?

Javascript 为什么';你不能验证它的功能吗?,javascript,underscore.js,Javascript,Underscore.js,尤其是在其的实现中。似乎一个简单的类型的迭代器==='function'就可以做到这一点。可能只是使用obj==null检查 // The cornerstone, an `each` implementation, aka `forEach`. // Handles objects with the built-in `forEach`, arrays, and raw objects. // Delegates to **ECMAScript 5**'s native `forE

尤其是在其
的实现中。似乎一个简单的
类型的迭代器==='function'
就可以做到这一点。可能只是使用
obj==null
检查

  // The cornerstone, an `each` implementation, aka `forEach`.
  // Handles objects with the built-in `forEach`, arrays, and raw objects.
  // Delegates to **ECMAScript 5**'s native `forEach` if available.
  var each = _.each = _.forEach = function(obj, iterator, context) {
    if (obj == null) return obj;
    if (nativeForEach && obj.forEach === nativeForEach) {
      obj.forEach(iterator, context);
    } else if (obj.length === +obj.length) {
      for (var i = 0, length = obj.length; i < length; i++) {
        if (iterator.call(context, obj[i], i, obj) === breaker) return;
      }
    } else {
      var keys = _.keys(obj);
      for (var i = 0, length = keys.length; i < length; i++) {
        if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
      }
    }
    return obj;
  };
//基石,一个'each'实现,又称'forEach'。
//使用内置的“forEach”、数组和原始对象处理对象。
//委派到**ECMAScript 5**的本机“forEach”(如果可用)。
var each=u0.each=0.forEach=函数(对象、迭代器、上下文){
如果(obj==null)返回obj;
if(nativeForEach&&obj.forEach===nativeForEach){
forEach(迭代器,上下文);
}否则如果(对象长度===+对象长度){
对于(变量i=0,长度=obj.length;i
无需验证。如果函数的输入不正确,则它是由编程错误引起的,应通过放大来处理。

如果不是函数,是否键入check it以引发错误?如果不进行打字检查,它就是这样做的


相关:。

可能是性能问题,但您最好询问下划线开发团队中的人员。我们只能推测脚本作者实现这些脚本的原因。尝试询问他们,而不是StackOverflow社区。因此,您宁愿让
\uForEach
以静默方式失败,也不愿告诉您传递了错误的值?当
迭代器
不是函数时,函数会抛出一个(可以说是不理想的)错误。我不认为这是基于意见的。该方法缺乏一致性,一种情况下返回obj,另一种情况下让语言抛出错误。我在jQuery中了解到几乎没有抛出任何错误,JS中的异常也不经常使用。遵循这一趋势也会带来更多的一致性。一致性和惯例不是意见。两者都是很好的设计选择。