为什么下划线EJB在许多本机Javascript函数周围都有包装函数?

为什么下划线EJB在许多本机Javascript函数周围都有包装函数?,javascript,underscore.js,code-design,Javascript,Underscore.js,Code Design,我注意到它有许多围绕本机Javascript函数的包装函数 例如: _.isArray, _.isBoolean, _.isNaN? 这有什么原因吗?或者这些仅仅是为了在使用下划线JS库时确保代码的一致性,还是只是为了增强这些函数 例如,u.isArray函数可以归结为: _.isArray = nativeIsArray || function(obj) { return toString.call(obj) === '[object Array]'; }; 有什么想法吗?这是

我注意到它有许多围绕本机Javascript函数的包装函数

例如:

_.isArray, _.isBoolean, _.isNaN?
这有什么原因吗?或者这些仅仅是为了在使用下划线JS库时确保代码的一致性,还是只是为了增强这些函数

例如,u.isArray函数可以归结为:

_.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
  };

有什么想法吗?

这是因为并非所有浏览器都提供这些功能。例如,在IE8中尝试
Array.isArray
,您将找不到它

如今,现代浏览器越来越符合ECMAScript标准,这样的“填隙片”需求越来越少,但情况并非总是如此

在大多数Javascript框架中,您会发现类似的看似冗余的函数,以确保它们的任何功能都不会因为给定浏览器中缺少某个函数而引发异常


还有像
.each(obj,func)
这样的函数,在您需要执行
array.prototype.forEach.call(obj,func)
(与真正数组的
arr.forEach(func)
相比)时,它们可以毫无问题地作用于类似数组的对象。因此,这是在确保
forEach
首先存在的基础上的另一个好处。

确保了完全的浏览器支持还有
(obj)的问题。当
obj
不是数组时,每个
obj.forEach
相比都是一个好处。