1. 程式人生 > >typeof的取值範圍以及 typeof 和 instanceof 的區別

typeof的取值範圍以及 typeof 和 instanceof 的區別

typeof:

typeof 運算子把型別資訊當作字串返回。 typeof 返回值有六種可能: “number,” “string,” “boolean,” “object,” “function,” 和 "undefined. "我們可以使用typeof來獲取一個變數是否存在,如if(typeof a!=“undefined”){}, 而不要去使用if(a)因為如果a不存在(未宣告)則會出錯,對於Array,Null等特殊物件使用typeof一律返回object。

在這裡插入圖片描述

instanceof:

instanceof 左運算元是一個類,右運算元是標識物件的類。如果左側的物件是右側類的例項,則返回true.而js中物件的類是通過初始化它們的建構函式來定義的。即instanceof的右運算元應當是一個函式。所有的物件都是object的例項。如果左運算元不是物件,則返回false,如果右運算元不是函式,則丟擲typeError。

instanceof 運算子是用來測試一個物件是否在其原型鏈原型建構函式的屬性。其語法是object instanceof constructor

instanceof 操作符用來比較兩個運算元的建構函式。只有在比較自定義的物件時才有意義。 如果用來比較內建型別,將會和 typeof 操作符 一樣用處不大

instanceof 比較內建型別 new String(‘foo’) instanceof String; // true new String(‘foo’) instanceof Object; // true

console.log('foo’instanceof String) // false console.log('foo’instanceof object) // false instanceof 用來比較屬於不同 JavaScript 上下文的物件(比如,瀏覽器中不同的文件結構)時將會出錯, 因為它們的建構函式不會是同一個物件。 區別: instanceof : 此運算子可以判斷一個變數是否是某個物件(類)的例項,返回值是布林型別的的作用,必須 var str=new String(“antzone”); console.log(str instanceof String);   列印結果為true,因為str是物件String的物件例項。一般說來只有使用建構函式建立的物件才會返回true,否則返回false,不過陣列是一個例外,都會返回true。

二.typeof運算子: typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意型別。它返回值是一個字串,該字串說明運算數的型別。