Updated _.isFinite to match ES5 and ES6 spec #830
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The EcmaScript 5 and 6 specs define isFinite as returning false only if ToNumber(object) is NaN, Infinity or -Infinity (a very short and clear read: http://es5.github.com/#x15.1.2.5)
The current implementation of _.isFinite acts as if ToNumber('42') === NaN, and returns false on _.isFinite('42').
This was originally done to combat an "issue" with EcmaScript's ToNumber, which returns true for empty strings (or strings full of nothing but spaces). The problem is that the fix was overzealous, and negates all argument coercion - which is the very heart of isFinite - and acts exactly the opposite of the spec and of the browsers' implementation.
This commit fixes it, while also catching the special gotcha in the spec for empty strings.
It's also much faster than the current implementation.