Many times you don't need to support all of the functionality/edge cases of the native method and that allows you to gain performance/custom-functionality and save code because you no longer need to have an ES5 compliant fallback.
Many libs, like Underscore.js, fork for native methods but could reduce code/gain speed if they settled for simpler methods.
Most devs don't care about supporting sparse arrays or ToUint32'ing a `length` value and this allows us to optimize for the common case.
Also, by implementing a custom method you can gain functionality like exiting early by explicitly returning `false` or method chaining.
It seems that the killer is the membership test[2] at line 44. What I don't really understand is why `i in O`, when O is an array, would be so slow, and furthermore, given that it is that slow, why `forEach` uses it instead of a simple bounds check.
[1]: https://developer.mozilla.org/en/JavaScript/Reference/Global...
Because I for one haven't heard any rumors that forEach is faster than a for loop for example, and a lot of the other stuff.
There is also a lot of things that are true in certain browsers but not others, if you want the fastest possible performance you probably need to optimize per engine. (But that is overkill for most Javascript applications)