diff options
author | Dave Methvin <dave.methvin@gmail.com> | 2011-11-07 11:25:51 -0500 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2011-11-07 11:25:51 -0500 |
commit | 795583d2936a48c6f0048e28f74c5fc71e3a60b0 (patch) | |
tree | b5977e85c3695184066027e6bff2da3c6d7a8006 | |
parent | 13aa84580a837b811dbe2f5d1bc34cf9ca9a6d8d (diff) | |
download | jquery-795583d2936a48c6f0048e28f74c5fc71e3a60b0.tar.gz jquery-795583d2936a48c6f0048e28f74c5fc71e3a60b0.zip |
Fix #10690. Make sure `.isNumeric()` can't get a `Date`.
Also add tests for custom objects with a `.toString()` method.
-rw-r--r-- | src/core.js | 2 | ||||
-rw-r--r-- | test/unit/core.js | 18 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/core.js b/src/core.js index d0eb612e6..62141b986 100644 --- a/src/core.js +++ b/src/core.js @@ -485,7 +485,7 @@ jQuery.extend({ }, isNumeric: function( obj ) { - return obj != null && rdigit.test( obj ) && !isNaN( obj ); + return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, type: function( obj ) { diff --git a/test/unit/core.js b/test/unit/core.js index 252f08d57..dc909546b 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -455,9 +455,17 @@ test("isFunction", function() { }); test( "isNumeric", function() { - expect( 33 ); - - var t = jQuery.isNumeric; + expect( 37 ); + + var t = jQuery.isNumeric, + Traditionalists = function(n) { + this.value = n; + this.toString = function(){ + return String(this.value); + }; + }, + answer = new Traditionalists( "42" ), + rong = new Traditionalists( "Devo" ); ok( t("-10"), "Negative integer string"); ok( t("0"), "Zero string"); @@ -475,6 +483,7 @@ test( "isNumeric", function() { ok( t(3.1415), "Positive floating point number"); ok( t(8e5), "Exponential notation"); ok( t("123e-2"), "Exponential notation string"); + ok( t(answer), "Custom .toString returning number"); equal( t(""), false, "Empty string"); equal( t(" "), false, "Whitespace characters string"); equal( t("\t\t"), false, "Tab characters string"); @@ -490,8 +499,11 @@ test( "isNumeric", function() { equal( t(Infinity), false, "Infinity primitive"); equal( t(Number.POSITIVE_INFINITY), false, "Positive Infinity"); equal( t(Number.NEGATIVE_INFINITY), false, "Negative Infinity"); + equal( t(rong), false, "Custom .toString returning non-number"); equal( t({}), false, "Empty object"); equal( t(function(){} ), false, "Instance of a function"); + equal( t( new Date ), false, "Instance of a Date"); + equal( t(function(){} ), false, "Instance of a function"); }); test("isXMLDoc - HTML", function() { |