我注意到UnderScoreJS在本机Javascript函数周围有很多包装函数。
以例如:
_.isArray, _.isBoolean, _.isNaN?
这有什么理由吗?或者这些仅仅是为了确保使用underscoreJS库时的代码一致性,或者只是增强这些功能?
例如,_. isArray函数可以归结为:
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) === '[object Array]';
};
有什么想法吗?
答案 0 :(得分:4)
因为这些功能并非在所有浏览器中都存在。例如,在IE8中尝试Array.isArray
,但您无法找到它。
现在,现代浏览器正在越来越多地了解ECMAScript标准,以及#34; shims"越来越少需要,但情况并非总是如此!
在大多数Javascript框架中,您会发现类似的看似冗余的函数,以确保它们的所有功能都不会抛出异常,因为在给定的浏览器中缺少函数。
还有像_.each(obj, func)
这样的函数可以在没有任何问题的情况下对数组类对象起作用,而你需要Array.prototype.forEach.call(obj, func)
(与真实数组的arr.forEach(func)
相比)。这样,除了确保forEach
首先存在之外,还有另一个好处。