typeof 與 intanceof 的區別(全)
阿新 • • 發佈:2019-01-01
1、位置不同:typeof放在變數前面,沒有預判斷的型別值,instanceof放在變數之後,後面跟想要判斷的型別值。這個比較簡單,程式碼如下:
var a = 0;
var b = new Array();
console.log(typeof a); // number
console.log(b instanceof Array); // true
2、判斷的型別不同,typeof
可以判斷基本型別和引用型別,而instanceof
只能判斷引用型別;
3、結果不同,typeof 有
"number","boolean","string","function","object","undefined"
六種結果,且返回的值都是字串格式,以小寫開頭,即
var a = 1;
console.log(typeof typeof a); // string
結果為”function”的只有函式型別:
var a = function(){};
console.log(typeof a); // function
結果為“object”的有三種類型,陣列、物件、正則
,程式碼如下:
var a = new Array();
var b = new Object();
var c = new RegExp();
console.log(typeof a, typeof b, typeof c); // object object object
而instanceof
的結果只有true
和false
,它用於判斷一個變數是不是某個物件的子類,它會沿著原型鏈__proto__
向上找,如果找到匹配的物件,就返回true,否則返回false。預判斷型別一般為3種:
var a = new Array();
var b = new Object();
var c = new RegExp();
var d = function(){};
var e = new d();
console.log(a instanceof Array); // true
console.log(a instanceof Object); // true
console.log(b instanceof Object); // true
console.log(c instanceof RegExp); // true
console.log(c instanceof Object); // true
console.log(d instanceof Function); // true
console.log(d instanceof Object); // true
console.log(e instanceof d); // true
最後一個行返回true是因為e是d的例項;
注意:instanceof右邊必須是一個物件;