es5-shim和underscore.js是什么?

4
我在JavaScript项目中同时使用了es5-shim.jsunderscore.js
es5-shim.js为Internet Explorer和一些旧浏览器添加了一些JavaScript本地函数,例如数组的reducesome。underscore.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的函数?

这些函数实现是否在功能上有所不同?es5-shim 是否添加了 underscore 没有的东西? - DCoder
@DCoder 行为完全相同。如果我只使用underscore.js函数,语法也完全相同(例如:_.each(myArray, function() { //Do some stuff });)。因此,唯一的问题可能是一些性能问题或者es5-shim中的一些错误,我不知道。 - Magus
如果es5-shim添加了underscore没有的内容,您应该保留它。否则,我的第一个想法是摆脱它,但您可能需要查看两种方法在es5测试套件上得分是否相同(您可能需要调整以在测试中包括shim/underscore)。 - DCoder
1
@DCoder,仅使用underscore.js运行es5测试套件非常困难。因为underscore.js不会以“本地风格”创建函数。因此,在仅使用underscore.js的Internet Explorer上,Array.some不存在,但_.some(myArray,...)存在。 - Magus
2个回答

11

我不同意@ganeshi的答案

如果你主要使用Underscore的是ES5已经提供的方法,比如reduce()和some(),那么建议删除underscore.js。

如果你现在编写的代码已经使用ES5方法,那么当你不再支持IE8或Firefox 3时,可以直接删除ES5-shim。

如果你现在使用underscore,那么当你不再支持IE8或Firefox 3时,仍将携带大量大多数浏览器已经提供的东西的额外复制。


4

正如您所提到的,es5-shim会在数组上添加一些JavaScript函数,例如map、reduce、some和forEach,如果浏览器的JavaScript引擎不兼容ES5。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只会增加应用程序大小,并浪费带宽。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接