Made jQuery.type more consistent with host objects.

This commit is contained in:
Robert Katic 2010-08-28 01:14:59 +02:00 committed by jeresig
parent 7367b524ec
commit 484cc6e220
2 changed files with 15 additions and 3 deletions

View file

@ -69,7 +69,10 @@ var jQuery = function( selector, context ) {
push = Array.prototype.push, push = Array.prototype.push,
slice = Array.prototype.slice, slice = Array.prototype.slice,
trim = String.prototype.trim, trim = String.prototype.trim,
indexOf = Array.prototype.indexOf; indexOf = Array.prototype.indexOf,
// [[Class]] -> type pairs
class2type = {};
jQuery.fn = jQuery.prototype = { jQuery.fn = jQuery.prototype = {
init: function( selector, context ) { init: function( selector, context ) {
@ -487,7 +490,7 @@ jQuery.extend({
type: function( obj ) { type: function( obj ) {
return obj == null ? return obj == null ?
String( obj ) : String( obj ) :
toString.call(obj).slice(8, -1).toLowerCase(); class2type[ toString.call(obj) ] || "object";
}, },
isPlainObject: function( obj ) { isPlainObject: function( obj ) {
@ -799,6 +802,11 @@ jQuery.extend({
browser: {} browser: {}
}); });
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
browserMatch = jQuery.uaMatch( userAgent ); browserMatch = jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) { if ( browserMatch.browser ) {
jQuery.browser[ browserMatch.browser ] = true; jQuery.browser[ browserMatch.browser ] = true;

View file

@ -219,7 +219,7 @@ test("trim", function() {
}); });
test("type", function() { test("type", function() {
expect(18); expect(22);
equals( jQuery.type(null), "null", "null" ); equals( jQuery.type(null), "null", "null" );
equals( jQuery.type(undefined), "undefined", "undefined" ); equals( jQuery.type(undefined), "undefined", "undefined" );
@ -239,6 +239,10 @@ test("type", function() {
equals( jQuery.type(new Date()), "date", "Date" ); equals( jQuery.type(new Date()), "date", "Date" );
equals( jQuery.type(new Function("return;")), "function", "Function" ); equals( jQuery.type(new Function("return;")), "function", "Function" );
equals( jQuery.type(function(){}), "function", "Function" ); equals( jQuery.type(function(){}), "function", "Function" );
equals( jQuery.type(window), "object", "Window" );
equals( jQuery.type(document.body), "object", "Element" );
equals( jQuery.type(document.createTextNode("foo")), "object", "TextNode" );
equals( jQuery.type(document.getElementsByTagName("*")), "object", "NodeList" );
}); });
test("isPlainObject", function() { test("isPlainObject", function() {