01.【JS基礎(chǔ)】數(shù)據(jù)類型的判斷方法

1.typeof方法

此類方法適用于非object的類型判斷,返回變量類型缝左。

var str = "abc";
var num = 123;
var arr = [1,2,3];
var boolean = true;
var obj = {a:1,b:2,c:3};
var fn1 = function(){alert(123);};
var date = new Date ();
var aaa;
var bbb = null;

console.log(typeof str);       //string
console.log(typeof num);       //number
console.log(typeof arr);       //object
console.log(typeof boolean);    //boolean
console.log(typeof obj);       //object
console.log(typeof fn1);       //function
console.log(typeof date);       //object
console.log(typeof aaa);       //undefined
console.log(typeof bbb);       //object

注意:

  • i. typeof 可以判斷function類型的變量姑食;
  • ii. typeof 不能判斷object的具體類型(數(shù)組/對(duì)象/null/日期均返回object類型)宰僧;
  • iii. 已聲明但未初始化(賦值)的變量typeof返回undefined主巍,初始化值為null的變量typeof返回object
  • iv. typeof NaN返回"number"

2.instanceof方法——判斷對(duì)象類型(基于原型鏈的操作符)

此方法適用于已知變量類型為object,判斷該對(duì)象的具體類型(注意大小寫)碱蒙,返回值為布爾值荠瘪。

obj instanceof Object

  • 左操作數(shù)obj :期望值是一個(gè)對(duì)象,如果是基本類型赛惩,返回false
  • 右操作符Object : 函數(shù)對(duì)象或函數(shù)構(gòu)造器哀墓, 如果不是,拋出typeerror異常
console.log(arr instanceof Array);      //true
console.log(fn1 instanceof Function);   //true
console.log(date instanceof Date);      //true
console.log(obj instanceof Object);     //true

3.constructor方法

類似于instanceof方法喷兼,但在繼承時(shí)會(huì)出錯(cuò)篮绰,慎用

console.log(arr.constructor === Array);      //true
console.log(fn1.constructor ===  Function);   //true
console.log(date.constructor ===  Date);      //true
console.log(obj.constructor === Object);     //true

在出現(xiàn)繼承時(shí):

    
function Student () {};       //構(gòu)造函數(shù)Student
function Person () {};        //構(gòu)造函數(shù)Person 

Student.prototype = new Person();   //Student繼承自Person
var Jack = new Student();       //通過構(gòu)造函數(shù)Student創(chuàng)建一個(gè)名為Jack的對(duì)象

console.log(Jack.constructor === Person);       //true
console.log(Jack.constructor === Student);      //flase

//但用instanceof方法時(shí),對(duì)象直接繼承和間接繼承都報(bào)true
console.log(Jack instanceof Person);       //true
console.log(Jack instanceof Student);      //true

4.prototype方法(通用)

此方法為通用方法季惯,但較繁瑣吠各,注意大小寫

console.log(Object.prototype.toString.call(str);        //[Object String]
console.log(Object.prototype.toString.call(num);        //[Object Number]
console.log(Object.prototype.toString.call(fn);        //[Object Function]
console.log(Object.prototype.toString.call(obj);        //[Object Object]
console.log(Object.prototype.toString.call(date);        //[Object Date]
console.log(Object.prototype.toString.call(aaa);        //[Object Undefined]
console.log(Object.prototype.toString.call(bbb);        //[Object Null]
console.log(Object.prototype.toString.call(arr);        //[Object Array]
console.log(Object.prototype.toString.call(boolean);    //[Object Boolean]

小結(jié):

  • a. 不判斷Object具體類型時(shí):用typeof方法判斷即可臀突;
  • b. 僅判斷Object具體類型時(shí):用instanceof或constructor方法,但constructor方法在有繼承的情況下會(huì)出錯(cuò)贾漏,盡量使用instanceof
  • c. 非Object類型與Object具體類型都要判斷時(shí):用prototype方法候学,注意大小寫
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市纵散,隨后出現(xiàn)的幾起案子梳码,更是在濱河造成了極大的恐慌,老刑警劉巖伍掀,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掰茶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜜笤,警方通過查閱死者的電腦和手機(jī)符匾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘩例,“玉大人,你說我怎么就攤上這事甸各《庀停” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵趣倾,是天一觀的道長聘惦。 經(jīng)常有香客問我,道長儒恋,這世上最難降的妖魔是什么善绎? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮诫尽,結(jié)果婚禮上禀酱,老公的妹妹穿的比我還像新娘。我一直安慰自己牧嫉,他們只是感情好剂跟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酣藻,像睡著了一般曹洽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辽剧,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天送淆,我揣著相機(jī)與錄音,去河邊找鬼怕轿。 笑死偷崩,一個(gè)胖子當(dāng)著我的面吹牛辟拷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播环凿,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梧兼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了智听?” 一聲冷哼從身側(cè)響起羽杰,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎到推,沒想到半個(gè)月后考赛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莉测,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年颜骤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捣卤。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忍抽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出董朝,到底是詐尸還是另有隱情鸠项,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布子姜,位于F島的核電站祟绊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哥捕。R本人自食惡果不足惜牧抽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遥赚。 院中可真熱鬧扬舒,春花似錦、人聲如沸凫佛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽御蒲。三九已至衣赶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厚满,已是汗流浹背府瞄。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遵馆。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓鲸郊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親货邓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秆撮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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