在我的JavaScript项目中既有es5-shim.js也有underscore.js。
es5-shim.js只是添加了一些javascript原生函数,比如用于Internet Explorer和一些旧浏览器的阵列上的reduce
和some
。underscore.js添加了相同的东西(但使用了不同的语法)和更多的东西(对象和数组上的实用函数)。
但是,如果es5-shim添加的函数存在,underscore.js将使用它们。
因此,在火狐或Chrome这样的“最近”浏览器上,underscore.js使用浏览器的原生功能。我认为它比纯javascript函数更好。但在Internet Explorer上,underscore.js使用es5-shim函数。如果我删除es5-shim.js,underscore.js会使用它自己的函数。
对此有什么建议吗?我应该从我的项目中删除es5-shim而只使用underscore.js吗?或者我应该让underscore.js使用es5-shim的功能?
发布于 2012-11-25 18:56:00
正如您正确提到的,es5-shim添加了一些JavaScript函数,如map、reduce、some和forEach on Array,如果浏览器的JavaScript引擎与ES5不兼容。Underscore.js在"_“名称空间中添加了类似于上面(以及更多)的实用方法。因此,在这种情况下,在同一应用程序中使用这两种方法是多余的。
也就是说,es5-shim添加了更多的函数,如Date.now、Date.toJSON、Function.bind、String.trim (以及更多),其中一些函数在Underscore.js中没有直接的等价物。例如,下划线提供了等同于Function.bind的_.bind和_.bindAll,但Underscore.js不提供Date.now和Date.toJSON。
因此,如果您使用es5-shim提供的这些附加方法,则可以在您的应用程序中同时使用es5-shim和Underscore.js。但是,如果您没有使用这些额外的方法,那么使用es5-shim只会增加应用程序大小并浪费带宽。
发布于 2013-01-17 01:18:50
我不同意@ganeshi's answer的观点。
如果下划线的主要用法是ES5中已有的东西,如reduce()和(),那么我建议您删除underscore.js。
如果您现在编写ES5方法的代码,那么当您不再支持IE8或Firefox3时,您可以简单地删除ES5-shim。
如果你现在使用下划线,那么当你不再支持IE8或Firefox3时,你仍然会携带一份大多数浏览器已经提供的大量东西的额外副本。
https://stackoverflow.com/questions/13540951
复制相似问题