Js 中 typeof 與 instanceof 的區(qū)別

# 前言

js 中 typeofinstanceof 常用來判斷一個變量是否為空芬骄,或者是什么類型的,那么他們之間有什么區(qū)別呢?
某種程度上兩種方式都行,但其中細節(jié)我們一定要搞清楚猎醇。

# typeof

typeof 是一個一元運算,放在一個運算數(shù)之前努溃,運算數(shù)可以是任意類型硫嘶。
返回值是一個 字符串,該字符說明運算數(shù)的類型梧税。typeof 一般只會返回六中數(shù)據(jù)類型:

console.log( typeof 123 ); // 'number'
console.log( typeof 'abc' ); // 'string'
console.log( typeof true); // 'boolean'
console.log( typeof function text(){ } ); // 'function'
console.log( typeof null); // 'object'
console.log( typeof undefined); // 'undefined'

通陈偌玻可以使用 typeof 來獲取一個變量是否存在

if( typeof a != 'underfined' ){
  alert('ok')
}

而不要去使用 if (a)因為如果 a 不存在(未聲明)則會出錯。
再看一個例子:

console.log( typeof ['1','2','3'] ); // 'object'
console.log( typeof {name:'張三'} ); // 'object'

可以看出:判斷一個變量的類型常常會用 typeof 運算符沒有問題第队,但在使用 typeof 運算符時采用引用類型存儲值會出現(xiàn)一個問題哮塞,無論引用的是什么類型的對象,他都會返回 object凳谦,這正是 typeof 的局限性忆畅。
這就需要用到 instanceof 來檢測某個對象是不是另一個對象的實例。

# instanceof

instanceof 運算符用來測試一個對象在其原型鏈中是否存在一個構(gòu)造函數(shù)的 prototype 屬性
通俗講 instanceof 左 操作數(shù)是一個類尸执,右 操作數(shù)是標(biāo)識對象的類家凯。如果左側(cè)的對象是右側(cè)類的實例,則返回 true如失。而 js 中對象的類是通過初始化它們的構(gòu)造函數(shù)來定義的绊诲。即 instanceof 的右操作數(shù)應(yīng)當(dāng)是一個函數(shù)。所有的對象都是 object 的實例褪贵。如果左操作數(shù)不是對象驯镊,則返回 false,如果右操作數(shù)不是函數(shù)竭鞍,則拋出typeError。

語法:object instanceof constructor
參數(shù):object(要檢測的對象)contructor(某個構(gòu)造函數(shù))
描述:instanceof 運算符用來檢測 constructor.prototype 是否存在于參數(shù) object 的原型臉鏈上

舉個栗子:

function Foo() {}
function Bar() {}
Bar.prototype = new Foo();
new Bar() instanceof Bar; // true
new Bar() instanceof Foo; // true
// 如果僅僅設(shè)置 Bar.prototype 為函數(shù) Foo 本身橄镜,而不是 Foo 構(gòu)造函數(shù)的一個實例
Bar.prototype = Foo;
new Bar() instanceof Foo; // false

new String('foo') instanceof String; // true
new String('foo') instanceof Object; // true
'foo' instanceof String; // false
'foo' instanceof Object; // false

# 總結(jié)

  1. typeof判斷所有變量的類型偎快,返回值有number,boolean洽胶,string晒夹,function,object姊氓,undefined丐怯。
  2. typeof對于豐富的對象實例,只能返回"Object"字符串翔横。
  3. instanceof用來判斷對象读跷,代碼形式為obj1 instanceof obj2(obj1是否是obj2的實例),obj2必須為對象禾唁, 否則會報錯效览!其返回值為布爾值无切。
  4. instanceof可以對不同的對象實例進行判斷,判斷方法是根據(jù)對象的原型鏈依次向下查詢丐枉,如果obj2的原型屬性存在obj1的原型鏈上哆键,(obj1 instanceof obj2)值為true。

一般會結(jié)合兩者封裝成一個工具類:

function getDataType(obj) {
  if (obj === null) {
    return 'null';
  } else if (typeof obj === 'object') {
    if (obj instanceof Array) {
      return 'array';
    } else {
      return 'object';
    }
  } else {
    return typeof obj;
  }
}

今天的內(nèi)容就到這里了瘦锹,小伙伴們記得點個贊哦 ~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末籍嘹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弯院,更是在濱河造成了極大的恐慌辱士,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抽兆,死亡現(xiàn)場離奇詭異识补,居然都是意外死亡,警方通過查閱死者的電腦和手機辫红,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門凭涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贴妻,你說我怎么就攤上這事切油。” “怎么了名惩?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵澎胡,是天一觀的道長。 經(jīng)常有香客問我娩鹉,道長攻谁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任弯予,我火速辦了婚禮戚宦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锈嫩。我一直安慰自己受楼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布呼寸。 她就那樣靜靜地躺著艳汽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪对雪。 梳的紋絲不亂的頭發(fā)上河狐,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音,去河邊找鬼甚牲。 笑死义郑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丈钙。 我是一名探鬼主播非驮,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雏赦!你這毒婦竟也來了劫笙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤星岗,失蹤者是張志新(化名)和其女友劉穎填大,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俏橘,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡允华,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寥掐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靴寂。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖召耘,靈堂內(nèi)的尸體忽然破棺而出百炬,到底是詐尸還是另有隱情,我是刑警寧澤污它,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布剖踊,位于F島的核電站,受9級特大地震影響衫贬,放射性物質(zhì)發(fā)生泄漏德澈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一固惯、第九天 我趴在偏房一處隱蔽的房頂上張望圃验。 院中可真熱鬧,春花似錦缝呕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸡捐,卻和暖如春栈暇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箍镜。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工源祈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煎源,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓香缺,卻偏偏與公主長得像手销,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子图张,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容