1. 程式人生 > >增強typeof 對複雜型別的判斷

增強typeof 對複雜型別的判斷

js中有六種資料型別,包括五種基本資料型別(Number,String,Boolean,Undefined,Null),和一種複雜資料型別(Object)。

typeof

由於js中的變數是鬆散型別的,所以它提供了一種檢測當前變數的資料型別的方法,也就是typeof關鍵字.

    console.log(typeof   123)   //number
    console.log(typeof   'abc')  //string
    console.log(typeof    true)       //boolean
    console.log(typeof    undefined)   //
undefined console.log(typeof new String()) //object console.log(typeof new Number()) //object console.log(typeof null) //object console.log(typeof {}) //object console.log(typeof []) //object console.log(typeof console.log) //function

可以看到 typeof 在對複雜型別進行判斷統一都是object型別的

 toString方法可以獲得複雜物件型別更加詳細的資訊

var toString = {}.toString
console.log(toString.call(new Date))     //[object Date]
console.log(toString.call([]))                //[object Array]
console.log(toString.call({}))               //[object Object]

封裝函式

var toString = {}.toString
    var types = {"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object","[object Error]":"error"}
    
function getType( obj ) { //如果為null 或者 undefined 直接返回 'null','undefined' if ( obj == null ) { console.log(1,obj) return String( obj ); } //如果是複雜物件型別或者函式型別 if(typeof obj === "object" || typeof obj === "function"){ return types[ toString.call(obj) ] || "object" //如果是基本型別 }else { return typeof obj } } console.log(getType(123)) //number console.log(getType('abc')) //string console.log(getType(true)) //boolean console.log(getType(new String())) //string console.log(getType(new Number())) //number console.log(getType(undefined)) //undefined console.log(getType(null)) //null console.log(getType({})) //object console.log(getType([])) //array console.log(getType(console.log)) //function