js判斷數(shù)據(jù)類型的方法有哪些冻押?有什么不同

記錄第一次面試——廣州凡科(三)

第三題:熱身的js題
到了js部分就要格外注意表達(dá)問(wèn)題了。畢竟對(duì)面的面試官聽(tīng)不懂你的表達(dá)鳞陨,基本就讓面試的氣氛十分尷尬昨寞。涼了一半
所以記住一些表達(dá)句子很有必要。

1.typeof
2.instanceof
3.constructor
4.Object.prototype.toString()

首先回顧:js的數(shù)據(jù)類型
基本分為基本類型和引用類型
基本類型:布爾厦滤、Number援岩、String、Undefined掏导、Null享怀、Symbol
引用類型:Object、Array趟咆、Data添瓷、RegExp、Function值纱、基本包裝類型(Boolean鳞贷、Number、String)單體內(nèi)置對(duì)象(Global虐唠、Math)

  • typeof

用法&例子:(真是不想說(shuō)筆試的時(shí)候忘記怎么用typeof了)
返回?cái)?shù)據(jù)類型的字符串形式

1  typeof "";  //"string"
2  typeof 1;   //"number"
3  typeof false; //"boolean"
4  typeof undefined; //"undefined"
5  typeof function(){}; //"function"
6  typeof {}; //"object"
7  typeof Symbol(); //"symbol"
8  typeof null; //"object"
9  typeof []; //"object"
10  typeof new Date(); //"object"
11  typeof new RegExp(); //"object"
12  typeof new Number(33) //"object"
13  typeof Null //"undefined"

總結(jié):
1.可以對(duì)基本類型做出準(zhǔn)確的判斷(除了null)可以返回的數(shù)據(jù)類型有:Number悄晃、String、Undefined、Symbol妈橄、Object、Function

2.從第8條看出翁脆,null返回的是“object”眷蚓,因?yàn)閚ull被認(rèn)為是一個(gè)空的對(duì)象引用,而Null或者N返回的是“undefined”反番,就是找不到數(shù)據(jù)類型嘛

3.對(duì)于引用類型沙热,typeof返回的是object,因?yàn)樗袑?duì)象的原型鏈最終指向Object罢缸,Object是所有對(duì)象的祖宗

4.從第12條看出篙贸,使用new 字符初始化的對(duì)象,typeof都是返回object

5.從第13條看出枫疆,對(duì)于未聲明變量Null爵川,typeof會(huì)返回“undefined”

6.最后一點(diǎn)則是我迷惑了很久的大小寫的問(wèn)題。
我們寫出有什么數(shù)據(jù)類型是大寫的息楔,但是typeof返回的是小寫的字符串形式寝贡。所以typeof 1===Number是返回false的。但是當(dāng)我們使用instanceof 時(shí)值依,

var a= new Number(22);
a instanceof Number // true
a instanceof number // 報(bào)錯(cuò)!number is not defined
  • instanceof

instanceof判斷A是否是B的實(shí)例圃泡,表達(dá)式為:A instanceof B,如果是返回true愿险,否則返回false颇蜡。在原型鏈上的原型都可以返回true的
比如:

[] instanceof Array; // true
[] instanceof Object; // true

所以instanceof只能判斷兩個(gè)對(duì)象是否屬于實(shí)例關(guān)系,不能具體判斷一個(gè)對(duì)象實(shí)例屬于哪種類型
undefined辆亏、null用instanceof 會(huì)報(bào)錯(cuò)

  • constructor

當(dāng)一個(gè)函數(shù) F被定義時(shí)风秤,JS引擎會(huì)為F添加 prototype 原型,然后再在 prototype上添加一個(gè) constructor 屬性褒链,并讓其指向自身唁情。

function F(){}
F.prototype
constructor: ? F()
__proto__: Object

當(dāng)執(zhí)行 var f = new F() 時(shí),F(xiàn) 被當(dāng)成了構(gòu)造函數(shù)甫匹,f 是F的實(shí)例對(duì)象甸鸟,此時(shí)原型上的 constructor 就被遺傳到了新創(chuàng)建的對(duì)象上,因此 f.constructor == F

var f=new F()
f.constructor===F // true

注意:
1.null和undefined是無(wú)效的對(duì)象兵迅,因此不會(huì)有constructor存在抢韭,這兩種類型數(shù)據(jù)需要通過(guò)其他方式判斷。

2.函數(shù)的 constructor 是不穩(wěn)定的恍箭,這個(gè)主要體現(xiàn)在自定義對(duì)象上刻恭,當(dāng)開發(fā)者重寫 prototype 后,原有的 constructor 引用會(huì)丟失,constructor 會(huì)默認(rèn)為 Object

F.prototype={a:"XXXX"}
var ff=new F()
ff.constructor===F  // false
ff.constructor  // ? Object() { [native code] }

*為什么變成了 Object鳍贾?
因?yàn)?prototype 被重新賦值的是一個(gè) { }鞍匾, { } 是 new Object() 的字面量,因此 new Object() 會(huì)將 Object 原型上的 constructor 傳遞給 { }骑科,也就是 Object 本身橡淑。

因此重寫原型一般需要給constructor重新賦值ff.constructor=F

  • Object.prototype.toString()

toString()是Object的原型方法,調(diào)用該方法咆爽,默認(rèn)返回當(dāng)前對(duì)象的[[Class]]梁棠。這是一個(gè)內(nèi)部屬性,其格式為[object Xxx],其中Xxx就是對(duì)象的類型斗埂。

Object.prototype.toString.call("a")
"[object String]"
Object.prototype.toString.call(undefined)
"[object Undefined]"
Object.prototype.toString.call(null)
"[object Null]"
Object.prototype.toString.call(new Date())
"[object Date]"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末符糊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呛凶,更是在濱河造成了極大的恐慌男娄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件把兔,死亡現(xiàn)場(chǎng)離奇詭異沪伙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)县好,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門围橡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缕贡,你說(shuō)我怎么就攤上這事翁授。” “怎么了晾咪?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵收擦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谍倦,道長(zhǎng)塞赂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任昼蛀,我火速辦了婚禮宴猾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叼旋。我一直安慰自己仇哆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布夫植。 她就那樣靜靜地躺著讹剔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上延欠,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天陌兑,我揣著相機(jī)與錄音,去河邊找鬼衫冻。 笑死诀紊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隅俘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼笤喳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼为居!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起杀狡,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒙畴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后呜象,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳凝,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年恭陡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹬音。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡休玩,死狀恐怖著淆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拴疤,我是刑警寧澤永部,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站呐矾,受9級(jí)特大地震影響苔埋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜒犯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一组橄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愧薛,春花似錦晨炕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春费奸,著一層夾襖步出監(jiān)牢的瞬間弥激,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工愿阐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留微服,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓缨历,卻偏偏與公主長(zhǎng)得像以蕴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辛孵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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