1. 程式人生 > >JavaScript 中 typeof 和 instanceof 的區別

JavaScript 中 typeof 和 instanceof 的區別

typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意型別。

它返回值是一個字串,該字串說明運算數的型別。typeof 運算子返回一個用來表示表示式的資料型別的字串。 )

typeof其實就是判斷引數是什麼型別的例項,就一個引數

typeof 一般只能返回如下幾個結果:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

運算數為數字 typeof(x) = "number" 

字串 typeof(x) = "string" 

布林值 typeof(x) = "boolean" 

物件,陣列和null typeof(x) = "object" 

函式 typeof(x) = "function" 

Array,Null 等特殊物件使用 typeof 一律返回 object,這正是 typeof 的侷限性。

在 JavaScript 中,判斷一個變數的型別嚐嚐會用 typeof 運算子,在使用 typeof 運算子時採用引用型別儲存值會出現一個問題,無論引用的是什麼型別的物件,它都返回 “object”。這就需要用到instanceof來檢測某個物件是不是另一個物件的例項。

instanceof

instanceof 運算子用來測試一個物件在其原型鏈中是否存在一個建構函式的 prototype 屬性。

語法:object instanceof constructor

引數:object(要檢測的物件.)constructor(某個建構函式)

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

instance:例項,例子

a instanceof b?alert("true"):alert("false");   //a是b的例項?真:假

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

測試 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