typeof和instance(檢測(cè)類型)

檢測(cè)基本類型使用typeof

typeof是檢測(cè)一個(gè)變量是不是基本數(shù)據(jù)類型的最佳工具,更具體一點(diǎn),typeof是確定一個(gè)變量是字符串、數(shù)值、布爾值,還是undefined的最佳工具。
\color{red}{ (這里為什么不說(shuō)null和object呢,因?yàn)槿绻兞康闹凳且粋€(gè)對(duì)象或null,typeof都會(huì)返回object) }

var s = 'jack'
var b = true
var i = 22
var u
var n = null
var o = new Object()

alert(typeof s)  // string
alert(typeof b)  // boolean
alert(typeof i)  // number
alert(typeof u)  // undefined
alert(typeof n)  // object
alert(typeof o)  // obejct

另外,typeof檢測(cè)function會(huì)返回function

檢測(cè)引用類型使用instanceof

檢測(cè)引用類型使用instanceof,因?yàn)橥ǔN覀儾⒉皇窍胫滥硞€(gè)值是對(duì)象,而是想知道它是什么類型的對(duì)象。

var person = new Object()

alert(person instanceof Object)  // true
alert(person instanceof Array)  // false
alert(person instanceof RegExp)  // false

instanceof會(huì)根據(jù)原型鏈來(lái)識(shí)別,它檢測(cè)后面參數(shù)\color{blue}{(構(gòu)造函數(shù))}prototype 是否存在于前面參數(shù)\color{blue}{(實(shí)例)}的原型鏈上,也就是判斷變量是否是給定引用類型的實(shí)例,或者說(shuō)是否繼承,instanceof會(huì)返回truefalse。
以下代碼摘自 js中typeof用法和instanceof用法

// 定義構(gòu)造函數(shù)
function C(){} 
function D(){} 

var o = new C();


o instanceof C; // true,因?yàn)?Object.getPrototypeOf(o) === C.prototype


o instanceof D; // false,因?yàn)?D.prototype 不在 o 的原型鏈上

o instanceof Object; // true,因?yàn)?Object.prototype.isPrototypeOf(o) 返回 true
C.prototype instanceof Object // true,同上

C.prototype = {};
var o2 = new C();

o2 instanceof C; // true

o instanceof C; // false,C.prototype 指向了一個(gè)空對(duì)象,這個(gè)空對(duì)象不在 o 的原型鏈上.

D.prototype = new C(); // 繼承
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true 因?yàn)?C.prototype 現(xiàn)在在 o3 的原型鏈上
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容