instanceof 和 typeof的區別

2021-08-15 08:28:11 字數 1336 閱讀 5387

undefined, number, string, boolean屬於簡單的值型別,不是物件。剩下的幾種情況——函式、陣列、物件、null、new number(10)都是物件。他們都是引用型別。

簡單的值型別用typeof就可以分辨清楚了,但是就是typeof來判斷引用型別的型別並不準確。比如陣列、正則、日期、物件的typeof返回值都是object,函式返回的就是function,這種返回太粗糙了。

函式和物件的關係:函式是一種物件,但函式不像陣列、正則、日期這些物件。其他的物件(函式除外)都是物件的乙個子集,但是函式卻可以創造出物件

function people() 

var people1 = new people(); //people1就是創造出來的物件

對於值型別,你可以通過typeof判斷,string/number/boolean都很清楚,但是typeof在判斷到引用型別的時候,返回值只有object/function,你不知道它到底是乙個object物件,還是陣列,還是new number等等。這個時候就可以使用instanceof。使用instanceof有很多細節問題 。

先看下面這個例子people這個物件是people創造出來的,但是people instanceof object也是正確的。

instanceof 的使用規則是: a instanceof b

a沿著proto這條線來找,同時b沿著prototype這條線來找,如果兩條線能找到同乙個引用,即同乙個物件,那麼就返回true。如果找到終點還未重合,則返回false。

按照上圖的原則有

js typeof和instanceof的區別

typeof是乙個一元運算,放在乙個運算數前面,運算數可以是任意型別的數 返回值一般有這幾個 number,boolean,string,function,object,undefined 實際應用中通常用來獲取乙個變數是否存在,if typeof a undefined 不要用if a 這樣的方式...

instanceof 和型別轉換

instanceof是j a的乙個保留關鍵字,先有繼承關係,再有instanceof的使用左邊是物件,右邊是類,返回型別是boolean型別。它的具體作用是測試左邊的物件是否是右邊類或者該類的子類建立的例項物件,是,則返回true,否則返回false。system.out.println a 物件 ...

js之 typeof和instanceof的區別

typeof和instanceof的區別 typeof可以獲取任意變數的型別 任意型別的物件用typeof獲得到的都是object 但是instanceof只能判斷物件的型別。示例一 這樣就可以在控制台上獲得 object 所以驗證了我們上邊所說的 任意型別的物件用typeof獲得到的都是objec...