天天看點

JS中typeof與instanceof的差別

JavaScript 中 typeof 和 instanceof 常用來判斷一個變量是否為空,或者是什麼類型的。但它們之間還是有差別的:

Typeof

typeof 是一個一進制運算,放在一個運算數之前,運算數可以是任意類型。

typeof用以擷取一個變量或者表達式的類型,它傳回值是一個字元串,該字元串說明運算數的類型。typeof 一般隻能傳回如下幾個結果:

number,boolean,string,function(函數),object(NULL,數組,對象),undefined。

 如:

alert(typeof (123));//typeof(123)傳回"number"

alert(typeof ("123"));//typeof("123")傳回"string"

我們可以使用typeof來擷取一個變量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因為如果a不存在(未聲明)則會出錯。

正因為typeof遇到null,數組,對象時都會傳回object類型,是以當我們要判斷一個對象是否是數組時,或者判斷某個變量是否是某個對象的執行個體則要選擇使用另一個關鍵文法instanceof

instanceof

instance:執行個體,例子

a instanceof b?alert("true"):alert("false"); //a是b的執行個體?真:假

instanceof 用于判斷一個變量是否某個對象的執行個體,如 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。

談到 instanceof 我們要多插入一個問題,就是 function 的 arguments,我們大家也許都認為 arguments 是一個 Array,但如果使用 instaceof 去測試會發現 arguments 不是一個 Array 對象,盡管看起來很像。

另外:

測試 var a=new Array();if (a instanceof Object) alert('Y');else alert('N');得'Y’

但 if (window instanceof Object) alert('Y');else alert('N');得'N'

是以,這裡的 instanceof 測試的 object 是指 js 文法中的 object,不是指 dom 模型對象。

使用 typeof 會有些差別

alert(typeof(window)) 會得 object

繼續閱讀