1、typeof
原理: 直接在計算機底層基于數(shù)據(jù)類型的值(二進制)進行檢測
缺點: typeof null "object" 對象存儲在計算機中,都是以000開始的二進制存儲, null也是000開頭,所以檢測出來的結(jié)果是對象
不能判斷對象: typeof 普通對象/數(shù)組對象/正則對象/日期對象 “object”
2、instanceof 檢測當(dāng)前實例是否屬于這個類的
原理: 只要當(dāng)前類出現(xiàn)在實例的原型鏈上, 結(jié)果都是true
由于我們可以肆意的修改原型的指向,所以檢測出來的結(jié)果是不準(zhǔn)的, 只能判斷類在不在原型鏈上
不能檢測基本數(shù)據(jù)類型
3、constructor
原理: 只有當(dāng)前類是該實例的原型對象所指向的構(gòu)造函數(shù)函數(shù)時 返回true
用來判斷 類 是 實例的構(gòu)造函數(shù)
用起來看似比instanceof好用一些, 因為constructor可以隨意修改, 所以也不準(zhǔn)
是支持檢測基本類型的
4、Object.prototype.toString.call()
推薦的使用方法, 精確的判斷基本數(shù)據(jù)類型和引用類型
NaN: 不是一個有效數(shù)字 但是它屬于Number類型 typeof NaN => "number"
NaN == NaN false
可以自己封裝一個方法, 基本數(shù)據(jù)類型用typeof 復(fù)雜類型用call