instanceof的實現代碼:
// L instanceof R function instance_of(L, R) {//L 表示左表達式,R 表示右表達式 var O = R.prototype;// 取 R 的顯式原型 L = L.__proto__; // 取 L 的隱式原型 while (true) { if (L === null) //已經找到頂層 return false; if (O === L) //當 O 嚴格等於 L 時,返回 true return true; L = L.__proto__; //繼續向上一層原型鏈查找 } }
首先typeof 能夠判斷基本數據類型,但是除了null,typeof null 返回的是object
但是對於對象來說typeof不能准確判斷類型,typeof 函數會返回function,除此之外全部都是object,不能准確判斷類型
instanceof可以判斷復雜數據類型,基本數據類型不可以
instanceof是通過原型鏈來判斷的 ,A instanceof B,在A的原型鏈中層層查找,是否有原型等於B.prototype,如果一直找到A的原型鏈的頂端(null,即Object.prototype._proto_),仍然不等於B,那么返回false,否則返回true
