4

我的 JavaScript 项目中有es5-shim.jsunderscore.js

es5-shim.js 只是在 Internet Explorer 和一些旧浏览器的数组上添加了一些 JavaScript 原生函数,例如reduce和。someunderscore.js 添加了相同的东西(但语法不同)和更多的东西(对象和数组上的实用程序函数)。

但是,如果 es5-shim 添加的函数存在,underscore.js 会使用它们。

因此,在 Firefox 或 Chrome 等“最新”浏览器上,underscore.js 使用浏览器的本机功能。我认为它比纯 javascript 函数更好。但是在 Internet Explorer 上,underscore.js 使用 es5-shim 函数。如果我删除 es5-shim.js,underscore.js 会使用它自己的函数。

对此有何建议?我应该从我的项目中删除 es5-shim 并且只使用 underscore.js 吗?还是应该让 underscore.js 使用 es5-shim 的功能?

4

2 回答 2

10

我不同意@ganeshi 的回答

如果你对 Underscore 的主要用途是 ES5 已经自带的东西,比如 reduce() 和 some(),那么我建议你删除 underscore.js。

如果您现在编写 ES5 方法,当您不再支持 IE8 或 Firefox 3 时,您可以简单地删除 ES5-shim。

如果您现在使用下划线,那么当您不再支持 IE8 或 Firefox 3 时,您仍然会携带大多数浏览器已经提供的大量内容的额外副本。

于 2013-01-16T17:18:50.007 回答
4

es5-shim,正如您正确提到的,如果浏览器的 JavaScript 引擎不兼容 ES5,则在 Array 上添加一些 JavaScript 函数,如 map、reduce、some 和 forEach。Underscore.js 在“_”命名空间中添加了类似于上述(以及更多)的实用方法。因此,在这种情况下,在同一个应用程序中同时使用两者是多余的。

也就是说,es5-shim 添加了更多函数,如 Date.now、Date.toJSON、Function.bind、String.trim (以及更多),其中一些在 Underscore.js 中没有直接等效项。例如 Underscore 确实提供了等效于 Function.bind 的 _.bind 和 _.bindAll,但 Underscore.js 不提供 Date.now 和 Date.toJSON。

因此,如果您使用 es5-shim 提供的这些附加方法,您可以在应用程序中同时使用 es5-shim 和 Underscore.js。但是,如果您不使用这些额外的方法,那么使用 es5-shim 只会不必要地增加应用程序大小并浪费带宽。

于 2012-11-25T10:56:00.423 回答