1.類型檢測(cè)
1)typeof(基本類型檢測(cè))
對(duì)所有基本類型的返回值
typeof?Number //“Number”
typeof?String //"string"
typeof?Boolean //"boolean"
typeof?null //"object"
typeof?undefined //"undefined"
typeof?object //"object"
對(duì)函數(shù)類型的返回值
typeof?function //"function"
2)由于typeof只適用于判斷基本類型,對(duì)object,Date,Array進(jìn)行檢測(cè)時(shí)只會(huì)統(tǒng)一返回“object”(很顯然這不是我們想要的,我們想知道它的具體類型),這時(shí)就要用到instanceof了,instanceof在檢測(cè)對(duì)象時(shí)會(huì)返回具體類型,如:
new?array()?instanceof?Array //true
new?Date()?instanceof?Date //true
...
如果想用instanceof去檢測(cè)基本類型只會(huì)統(tǒng)一返回false,另外由于instanceof是基于原型鏈的,所以有下列結(jié)果:
//定義父類
function?Parent(){}
//定義子類
function?Child(){}
//讓子類繼承父類
Child.prototype?=?new?Parent();
//此時(shí)再new一個(gè)子類實(shí)例,使用instanceof
new?Child()?instanceof?Child; //true
new?Child()?instanceof?Parent //true
通過原型鏈索引,new的是子類實(shí)例,子類繼承父類,所以子類實(shí)例既是子類類型又屬于父類類型
PS:instanceof在跨iframe或者window時(shí)由于存在多個(gè)window對(duì)象,所以在使用instanceof檢測(cè)時(shí)會(huì)返回false
3)object.prototype.toString
說實(shí)話-?-,這個(gè)沒用過,所以漲知識(shí)了
Object.prototype.toString.apply([]) //"[Object?Array]"
Object?.prototype.toString.apply(function(){}); //"[Object?function]"
Object?.prototype.toString.apply(null); //"[Object?null]'
...
PS:ie6/7/8下存在兼容性問題,在檢測(cè)null時(shí)會(huì)返回object
4)constructor構(gòu)造器
每個(gè)對(duì)象都有個(gè)constructor屬性,它指向該對(duì)象的構(gòu)造函數(shù)類型,不過該屬性的值可以被改寫的,所以用它的判斷并不可靠
5)duck?type
百度了為啥叫“鴨子類型”,有這樣的話:“當(dāng)看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子?!?大概意思就是說當(dāng)某個(gè)對(duì)象具備某種類型的特征或者行為時(shí)就可以被判斷為某種類型,不知道是不是“能力檢測(cè)”那種意思-?-
2017-02-26
手動(dòng)點(diǎn)贊
2017-01-10
typeof Number
"function"
2016-09-05
厲害 佩服