1. 程式人生 > >typeof() 和instanceof()的作用和區別

typeof() 和instanceof()的作用和區別

概念:

在JS中,typeof 和 instanceof 方法常用來判斷一個變數是否為空,或者是什麼型別的。

區別:

typeof 是一個一元運算,放在運算數之前,運算數可以是任意型別的。返回值是一個字串,該字串用來表示判斷的變數的型別。返回結果一般是Number、String、Boolean、Object、Function、Undefind.

console.log(typeof(123));//Number
console.log(type('123'));//String
var params1={};
var arr=[];
var d=null;
console.log(typeof(params1));//Object
console.log(typeof(arr));//Object
console.log(typeof(d));//Object
if(typeof(arr)!=undefined){
//function
}

上述例子可以看到,對於對於 Array,Null 等特殊物件使用 typeof 一律返回 object,這正是 typeof 的侷限性。這時就要用到下面要說的instanceof方法。

instanceof 是用於判斷一個變數是否屬於某個物件的例項。

instanceof 運算子用來檢測 constructor.prototype 是否存在於引數 object 的原型鏈上。

var a=new Array();

alert(a instanceof Array); // true,

alert(a instanceof Object) //也會返回 true; Array 是 object 的子類。


function test(){};

var a=new test();

alert(a instanceof test) //會返回true

alert(a==b);  //flase
另外,更重的一點是 instanceof 可以在繼承關係中用來判斷一個例項是否屬於它的父型別。
function Foo(){} 
Foo.prototype = new Aoo();//JavaScript 原型繼承 
var foo = new Foo(); 
console.log(foo instanceof Foo)//true 
console.log(foo instanceof Aoo)//true

上//面的程式碼中是判斷了一層繼承關係中的父類,在多層繼承關係中,instanceof 運算子同樣適用。