Make _.isFinite follow ES6 Number.isFinite.

This commit is contained in:
John-David Dalton
2014-06-22 02:34:54 -07:00
parent 35ce087f3b
commit e143a0ec6b
2 changed files with 36 additions and 33 deletions

View File

@@ -6693,7 +6693,7 @@
* // => false * // => false
*/ */
function isFinite(value) { function isFinite(value) {
return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); return typeof value == 'number' && nativeIsFinite(value);
} }
/** /**

View File

@@ -5430,45 +5430,48 @@
QUnit.module('lodash.isFinite'); QUnit.module('lodash.isFinite');
(function() { (function() {
test('should return `true` for finite values', 5, function() { test('should return `true` for finite values', 1, function() {
strictEqual(_.isFinite(0), true); var values = [0, 1, 3.14, -1],
strictEqual(_.isFinite(1), true); expected = _.map(values, _.constant(true));
strictEqual(_.isFinite(3.14), true);
strictEqual(_.isFinite(-1), true); var actual = _.map(values, function(value) {
strictEqual(_.isFinite(new Number(0)), true); return _.isFinite(value);
});
deepEqual(actual, expected);
}); });
test('should return `false` for non-finite values', 3, function() { test('should return `false` for non-finite values', 1, function() {
strictEqual(_.isFinite(NaN), false); var values = [NaN, Infinity, -Infinity, Object(1)],
strictEqual(_.isFinite(Infinity), false); expected = _.map(values, _.constant(false));
strictEqual(_.isFinite(-Infinity), false);
var actual = _.map(values, function(value) {
return _.isFinite(value);
});
deepEqual(actual, expected);
}); });
test('should return `false` for non-numeric values', 9, function() { test('should return `false` for non-numeric values', 1, function() {
strictEqual(_.isFinite(null), false); var values = [undefined, [], true, new Date, new Error, '', ' ', '2px'],
strictEqual(_.isFinite(undefined), false); expected = _.map(values, _.constant(false));
strictEqual(_.isFinite([]), false);
strictEqual(_.isFinite(true), false); var actual = _.map(values, function(value) {
strictEqual(_.isFinite(new Date), false); return _.isFinite(value);
strictEqual(_.isFinite(new Error), false); });
strictEqual(_.isFinite(''), false);
strictEqual(_.isFinite(' '), false); deepEqual(actual, expected);
strictEqual(_.isFinite('2px'), false);
}); });
test('should return `true` for numeric string values', 3, function() { test('should return `false` for numeric string values', 1, function() {
strictEqual(_.isFinite('2'), true); var values = ['2', '0', '08'],
strictEqual(_.isFinite('0'), true); expected = _.map(values, _.constant(false));
strictEqual(_.isFinite('08'), true);
});
test('should work with numbers from another realm', 1, function() { var actual = _.map(values, function(value) {
if (_._object) { return _.isFinite(value);
strictEqual(_.isFinite(_._number), true); });
}
else { deepEqual(actual, expected);
skipTest();
}
}); });
}()); }());