JS分為基本類型和引用類型兩大類;
基本類型:Number,String,Boolean,Undefined,Null,Symbol
引用類型:Object晒夹,Date,Function,Array,RegExp
檢測數據類型的方法
1、typeof
typeof 1 // "number"
typeof '' // string
typeof true //boolean
typeof undefined //undefined
typeof Symbol() // symbol
typeof null //object
typeof new Date() //object
typeof new RegExp() //object
typeof [] //object
typeof {} //object
function fun(){}
typeof fun // function
typeof 對于基本類型中Number,String,Boolean,Undefined,Symbol和引用類型的Function可以檢測出具體的數據類型姊氓,但是對于 Null丐怯,Array,Date,Object,RegExp統(tǒng)一識別成object
2、instanceof
instanceof 是用來判斷 A 是否為 B 的實例翔横,表達式為:A instanceof B读跷,如果 A 是 B 的實例,則返回 true,否則返回 false禾唁。
newDate() instanceof Date;// true
new RegExp() instanceof RegExp // true
[] instanceof Array // true
{} instanceof Object // true
[] instanceof Object;// true
3效览、toString
toString() 是 Object 的原型方法,調用該方法荡短,默認返回當前對象的 [[Class]] 丐枉。這是一個內部屬性,其格式為 [object Xxx] 掘托,其中 Xxx 就是對象的類型瘦锹。
對于 Object 對象,直接調用 toString() 就能返回 [object Object] 闪盔。而對于其他對象弯院,則需要通過 call / apply 來調用才能返回正確的類型信息。
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(newFunction()) ; // [object Function]
Object.prototype.toString.call(newDate()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(newRegExp()) ; // [object RegExp]
Object.prototype.toString.call(newError()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全局對象 global 的引用
4泪掀、constructor
當執(zhí)行 var f = new Fun() 時,Fun被當成了構造函數祝辣,f 是Fun的實例對象贴妻,此時 Fun 原型上的 constructor 傳遞到了 f 上,因此 f.constructor == Fun
可以看出蝙斜,Fun 利用原型對象上的 constructor 引用了自身名惩,當 Fun 作為構造函數來創(chuàng)建對象時,原型上的 constructor 就被遺傳到了新創(chuàng)建的對象上孕荠, 從原型鏈角度講娩鹉,構造函數 Fun就是新對象的類型攻谁。這樣做的意義是,讓新對象在誕生以后弯予,就具有可追溯的數據類型戚宦。
同樣,JavaScript 中的內置對象在內部構建時也是這樣做的: