From 82d10848c66e33a221e1231f400c8a3ab5edb798 Mon Sep 17 00:00:00 2001 From: Oleg Gaidarenko Date: Tue, 22 Dec 2015 14:17:53 +0300 Subject: [PATCH] Revert "Core: make isNumeric limited to strings and numbers" This reverts commit ada073e9acfc9a103b13b9b69d26590e1c834d04. --- src/core.js | 12 ++++++------ test/unit/core.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core.js b/src/core.js index d7a6b9769..4a1820b3d 100644 --- a/src/core.js +++ b/src/core.js @@ -217,12 +217,12 @@ jQuery.extend( { isNumeric: function( obj ) { - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - ( obj - parseFloat( obj ) + 1 ) >= 0; + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; }, isEmptyObject: function( obj ) { diff --git a/test/unit/core.js b/test/unit/core.js index 768519889..c0edd3dcd 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -479,8 +479,8 @@ QUnit.test( "isNumeric", function( assert ) { assert.ok( t( 1.5999999999999999 ), "Very precise floating point number" ); assert.ok( t( 8e5 ), "Exponential notation" ); assert.ok( t( "123e-2" ), "Exponential notation string" ); + assert.ok( t( new ToString( "42" ) ), "Custom .toString returning number" ); - assert.equal( t( new ToString( "42" ) ), false, "Custom .toString returning number" ); assert.equal( t( "" ), false, "Empty string" ); assert.equal( t( " " ), false, "Whitespace characters string" ); assert.equal( t( "\t\t" ), false, "Tab characters string" ); -- 2.39.5