diff --git a/test/objects.js b/test/objects.js index 8fb3d1b9d..2ee0a514d 100644 --- a/test/objects.js +++ b/test/objects.js @@ -491,6 +491,20 @@ $(document).ready(function() { ok(_.isRegExp(iRegExp), 'even from another frame'); }); + test("objects: isFinite", function() { + ok(!_.isFinite(undefined), 'undefined is not Finite'); + ok(!_.isFinite(null), 'null is not Finite'); + ok(!_.isFinite(NaN), 'NaN is not Finite'); + ok(!_.isFinite(Infinity), 'Infinity is not Finite'); + ok(!_.isFinite(-Infinity), '-Infinity is not Finite'); + ok(!_.isFinite('12'), 'Strings are not numbers'); + var obj = new Number(5); + ok(_.isFinite(obj), 'Number instances can be finite'); + ok(_.isFinite(0), '0 is Finite'); + ok(_.isFinite(123), 'Ints are Finite'); + ok(_.isFinite(-12.44), 'Floats are Finite'); + }); + test("objects: isNaN", function() { ok(!_.isNaN(undefined), 'undefined is not NaN'); ok(!_.isNaN(null), 'null is not NaN'); diff --git a/underscore.js b/underscore.js index cb2d424de..4276ece3e 100644 --- a/underscore.js +++ b/underscore.js @@ -824,6 +824,11 @@ return toString.call(obj) == '[object Number]'; }; + // Is a givin number finite? + _.isFinite = function(obj) { + return _.isNumber(obj) && isFinite(obj); + }; + // Is the given value `NaN`? _.isNaN = function(obj) { // `NaN` is the only value for which `===` is not reflexive.