基本數據類型(簡單數據類型或原始類型):Undefined、Null、Boolean、Number、String 複雜數據類型:Object ES6新增的數據類型:Symbol 對象是最複雜的數據類型,他能夠分爲三個子類型:object、array、function(不正規說法)javascript
var s = "yicong";
var b = true;
var n = null;
var u;
var o = new Object();
function f(){};
typeof s; // string
typeof b; // boolean
typeof n; // object 特殊
typeof u; // undefined
typeof o; // object
typeof f; // function
typeof Symbol(); // symbol
typeof {}; // object
typeof []; // object
typeof window; // object
typeof NaN; // number複製代碼
如上所知:java
若是是引用類型值,那麼instanceof操做符就會返回true;git
注意:全部引用類型的值都是Object的實例,若是使用instanceof操做符去檢測基本類型的值,則它會返回false;github
爲何全部引用類型的值都是Object的實例?
由於當你在控制檯寫下 [] 的時候,它已經給你隱式幫你new Array()了,Array()是一個構造函數,因此[]就是對象的實例。函數
解答:由於基本類型不是對象ui
function instance_of(ordinary,construct){
let conProto = construct.prototype;
ordinary = ordinary.__proto__;
while(true){//一直循環下去,也就是在ordinary的原型鏈上尋找,直到ordinary的原型鏈上有construct.prototype爲止
if(ordinary === null){
return false;
}
if (ordinary === conProto){
return true;
}
ordinary = ordinary.__proto__;
}
}複製代碼
也就是說:spa
ordinary對象是否是construct構造函數構造(new)出來的,prototype
ordinary對象的原型鏈上有沒有construct的原型code
更多文章請轉移:github.com/wangyicong
對象