2012-11-20 45 views
4
var obj = {},ar = [],nothing=null,empty=undefined,word ='string',headorTail = true; 

console.log(typeof obj) //object 
console.log(typeof ar)//object 
console.log(typeof nothing)//object 
console.log(typeof empty)//undefined 
console.log(typeof word)//string 
console.log(typeof headorTail)//boolean 

但是我怎樣才能得到obj,ar的類型,什麼都不是"object, array,null" - 實現這個的最好方法是什麼?如何獲得確切的typeof是object/array/null ..?

回答

3

如果你使用jQuery,您可以使用jQuery.type

jQuery.type(true) === "boolean" 
jQuery.type(3) === "number" 
jQuery.type("test") === "string" 
jQuery.type(function(){}) === "function" 
jQuery.type([]) === "array" 
jQuery.type(new Date()) === "date" 
jQuery.type(/test/) === "regexp" 

其他的一切回報"object"作爲其類型。

2

你可以嘗試提取的構造函數的名字,而你並不需要的JQuery:

function safeConstructorGet(obj) { 
    try { 
    console.log(obj.constructor.name) //object   
    } catch (e) { 
    console.log(obj) 
    } 
} 

safeConstructorGet(obj); //Object 
safeConstructorGet(ar); //Array 
safeConstructorGet(nothing); //null 
safeConstructorGet(empty); //undefined 
safeConstructorGet(word); //String 
safeConstructorGet(headorTail); //Boolean 
2
function getType(obj) { 
    // Object.toString returns something like "[object Type]" 
    var objectName = Object.prototype.toString.call(obj); 
    // Match the "Type" part in the first capture group 
    var match = /\[object (\w+)\]/.exec(objectName); 

    return match[1].toLowerCase(); 
} 

// Test it! 
var arr = [null, undefined, {}, [], 42, "abc"]; 
arr.forEach(function(e){ console.log(getType(e)); }); 

參見MDN的Object.toString

1

即使這太好了!

function getType(v) { 
    return (v === null) ? 'null' : (v instanceof Array) ? 'array' : typeof v; 
} 

var myArr = [1,2,3]; 
var myNull = null; 
var myUndefined; 
var myBool = false; 
var myObj = {}; 
var myNum = 0; 
var myStr = 'hi'; 
相關問題