]> source.dussan.org Git - jquery.git/commitdiff
Fix #13075. Optimize $.type by preferring `typeof`. Close gh-1089.
authorSebi Burkhard <sebi.burkhard@gmail.com>
Tue, 18 Dec 2012 15:33:32 +0000 (22:33 +0700)
committerDave Methvin <dave.methvin@gmail.com>
Sun, 23 Dec 2012 20:41:56 +0000 (15:41 -0500)
Also fixes browsers where `typeof RegExp === "function"`.

src/core.js
test/unit/core.js

index 5927d1936016f0d2815dcf2fa862284dbd597753..3d5f4be3f54d67752f7a6ce14cf0f1068236bf2b 100644 (file)
@@ -427,9 +427,12 @@ jQuery.extend({
        },
 
        type: function( obj ) {
-               return obj == null ?
-                       String( obj ) :
-                       class2type[ core_toString.call(obj) ] || "object";
+               if ( obj == null ) {
+                       return String( obj );
+               }
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ core_toString.call(obj) ] || "object" :
+                       typeof obj;
        },
 
        isPlainObject: function( obj ) {
index 09f5c4c9410f0d6c9ab16dde6e8de0d974832f9d..db21c41ccb3fad6fd97ce7c09f799d9c0b084e02 100644 (file)
@@ -243,7 +243,7 @@ test("trim", function() {
 });
 
 test("type", function() {
-       expect( 24 );
+       expect( 28 );
 
        equal( jQuery.type(null), "null", "null" );
        equal( jQuery.type(undefined), "undefined", "undefined" );
@@ -269,6 +269,16 @@ test("type", function() {
        equal( jQuery.type(document.body), "object", "Element" );
        equal( jQuery.type(document.createTextNode("foo")), "object", "TextNode" );
        equal( jQuery.type(document.getElementsByTagName("*")), "object", "NodeList" );
+
+       // Avoid Lint complaints
+       var MyString = String;
+       var MyNumber = Number;
+       var MyBoolean = Boolean;
+       var MyObject = Object;
+       equal( jQuery.type(new MyBoolean(true)), "boolean", "Boolean" );
+       equal( jQuery.type(new MyNumber(1)), "number", "Number" );
+       equal( jQuery.type(new MyString("a")), "string", "String" );
+       equal( jQuery.type(new MyObject()), "object", "Object" );
 });
 
 asyncTest("isPlainObject", function() {