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