我的JavaScript项目中同时有es5-shim.js和underscore.js。
es5-shim.js只需在Internet Explorer和一些旧浏览器的数组上添加一些JavaScript本机函数,如reduce
和some
。 下划线.js添加相同的内容(但语法不同)和更多内容(对象和数组上的实用程序函数)。
但是,如果 es5-shim 添加的功能存在,请强调.js使用它们。
因此,在像Firefox或Chrome这样的"最近"浏览器上,下划线.js使用浏览器的本机功能。我认为它比纯粹的javascript函数更好。但在 Internet Explorer 上,下划线.js使用 es5-shim 函数。如果我删除 es5-shim.js,下划线.js使用它自己的函数。
对此有什么建议吗?我应该从项目中删除 es5-shim 并只使用下划线吗.js ?还是我应该强调.js使用 es5-shim 的函数?
我不同意@ganeshi的回答。
如果你对Underscore的主要用途是ES5已经附带的东西,如reduce()和some(),那么我建议你删除underscore.js。
如果您现在使用 ES5 方法编写代码,则当您不再支持 IE8 或 Firefox 3 时,只需删除 ES5-shim 即可。
如果你现在使用下划线,那么当你不再支持IE8或Firefox 3时,你仍然会携带大多数浏览器已经提供的大量东西的额外副本。
es5-shim,正如你正确提到的,如果浏览器的JavaScript引擎不兼容ES5,则在Array上添加一些JavaScript函数,如map,reduce,some和forEach。下划线.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 只会不必要地增加应用程序大小并浪费带宽。