From c6093c084c6f1766c9560ad92132168c5337ebad Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 30 Oct 2012 21:36:53 -0700 Subject: [PATCH] Ensure `_.isFinite` returns `false` for non-numeric strings. [closes #98] Former-commit-id: 2505c8d7d9a0ab1e5f669730c318efdc9232799b --- lodash.js | 3 ++- test/test.js | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lodash.js b/lodash.js index a368ce7d6..434eab994 100644 --- a/lodash.js +++ b/lodash.js @@ -89,6 +89,7 @@ var nativeBind = reNative.test(nativeBind = slice.bind) && nativeBind, nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray, nativeIsFinite = window.isFinite, + nativeIsNaN = window.isNaN, nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys, nativeMax = Math.max, nativeMin = Math.min, @@ -1337,7 +1338,7 @@ * // => false */ function isFinite(value) { - return nativeIsFinite(value ? +value : parseFloat(value)); + return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); } /** diff --git a/test/test.js b/test/test.js index 38b63bce0..e2370b298 100644 --- a/test/test.js +++ b/test/test.js @@ -774,6 +774,27 @@ /*--------------------------------------------------------------------------*/ + QUnit.module('lodash.isFinite'); + + (function() { + test('should return `false` for non-numeric values', function() { + equal(_.isFinite(null), false); + equal(_.isFinite([]), false); + equal(_.isFinite(true), false); + equal(_.isFinite(''), false); + equal(_.isFinite(' '), false); + equal(_.isFinite('2px'), false); + }); + + test('should return `true` for numeric string values', function() { + equal(_.isFinite('2'), true); + equal(_.isFinite('0'), true); + equal(_.isFinite('08'), true); + }); + }()); + + /*--------------------------------------------------------------------------*/ + QUnit.module('lodash.isObject'); (function() {