]> source.dussan.org Git - jquery.git/commitdiff
Fix #10478. Replace jQuery.isNaN with jQuery.isNumeric.
authorDave Methvin <dave.methvin@gmail.com>
Wed, 12 Oct 2011 01:04:22 +0000 (21:04 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 12 Oct 2011 01:04:22 +0000 (21:04 -0400)
Thanks to Christian C. Salvadó for the unit tests!

src/core.js
src/css.js
src/data.js
src/dimensions.js
test/unit/core.js

index 7f30edea2b2ab03faa8da7b62b76de937fa65cae..e28c1b524ce54459608583dcfcf2f039860bfe7e 100644 (file)
@@ -483,8 +483,8 @@ jQuery.extend({
                return obj && typeof obj === "object" && "setInterval" in obj;
        },
 
-       isNaN: function( obj ) {
-               return obj == null || !rdigit.test( obj ) || isNaN( obj );
+       isNumeric: function( obj ) {
+               return obj != null && rdigit.test( obj ) && !isNaN( obj );
        },
 
        type: function( obj ) {
index 76c2255ce40739d7c5a9916fbbebbbdfc6ce6c41..2adfdffe1ed4e2b40297f3390e78907a126a9cf7 100644 (file)
@@ -211,7 +211,7 @@ if ( !jQuery.support.opacity ) {
                set: function( elem, value ) {
                        var style = elem.style,
                                currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
                                filter = currentStyle && currentStyle.filter || style.filter || "";
 
                        // IE has trouble with opacity if it does not have layout
index 0ce3b7d66ef30a38e8b3b1410e43c828ea32da7e..02f96a8495c7eb897030c5fcb324ec002f0e031d 100644 (file)
@@ -323,7 +323,7 @@ function dataAttr( elem, key, data ) {
                                data = data === "true" ? true :
                                data === "false" ? false :
                                data === "null" ? null :
-                               !jQuery.isNaN( data ) ? parseFloat( data ) :
+                               jQuery.isNumeric( data ) ? parseFloat( data ) :
                                        rbrace.test( data ) ? jQuery.parseJSON( data ) :
                                        data;
                        } catch( e ) {}
index 7df0d5ddfa4e8d4aa155328216d2241b861e0606..d339817c991e9814fc75a942c61e0fcdfd15eb17 100644 (file)
@@ -61,7 +61,7 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
                        var orig = jQuery.css( elem, type ),
                                ret = parseFloat( orig );
 
-                       return jQuery.isNaN( ret ) ? orig : ret;
+                       return jQuery.isNumeric( ret ) ? ret : orig;
 
                // Set the width or height on the element (default to pixels if value is unitless)
                } else {
index 0f4504a1300f3edc23f292b3cf9973f78bc11954..0756e7947bcf9b7bbb917b748dbc5c7b6e5759ce 100644 (file)
@@ -454,6 +454,46 @@ test("isFunction", function() {
        });
 });
 
+test( "isNumeric", function() {
+       expect( 33 );
+
+       var t = jQuery.isNumeric;
+
+       ok( t("-10"), "Negative integer string");
+       ok( t("0"), "Zero string");
+       ok( t("5"), "Positive integer string");
+       ok( t(-16), "Negative integer number");
+       ok( t(0), "Zero integer number");
+       ok( t(32), "Positive integer number");
+       ok( t("040"), "Octal integer literal string");
+       ok( t(0144), "Octal integer literal");
+       ok( t("0xFF"), "Hexadecimal integer literal string");
+       ok( t(0xFFF), "Hexadecimal integer literal");
+       ok( t("-1.6"), "Negative floating point string");
+       ok( t("4.536"), "Positive floating point string");
+       ok( t(-2.6), "Negative floating point number");
+       ok( t(3.1415), "Positive floating point number");
+       ok( t(8e5), "Exponential notation");
+       ok( t("123e-2"), "Exponential notation string");
+       equals( t(""), false, "Empty string");
+       equals( t("        "), false, "Whitespace characters string");
+       equals( t("\t\t"), false, "Tab characters string");
+       equals( t("abcdefghijklm1234567890"), false, "Alphanumeric character string");
+       equals( t("xabcdefx"), false, "Non-numeric character string");
+       equals( t(true), false, "Boolean true literal");
+       equals( t(false), false, "Boolean false literal");
+       equals( t("bcfed5.2"), false, "Number with preceding non-numeric characters");
+       equals( t("7.2acdgs"), false, "Number with trailling non-numeric characters");
+       equals( t(undefined), false, "Undefined value");
+       equals( t(null), false, "Null value");
+       equals( t(NaN), false, "NaN value");
+       equals( t(Infinity), false, "Infinity primitive");
+       equals( t(Number.POSITIVE_INFINITY), false, "Positive Infinity");
+       equals( t(Number.NEGATIVE_INFINITY), false, "Negative Infinity");
+       equals( t({}), false, "Empty object");
+       equals( t(function(){} ), false, "Instance of a function");
+});
+
 test("isXMLDoc - HTML", function() {
        expect(4);