如何判斷變量類型

在JS中如何判斷變量的類型屬于基礎(chǔ)知識(shí),很多時(shí)候我們會(huì)忽略金度。畢竟上手代碼的時(shí)候可以現(xiàn)查应媚。無論如何演變,我想基本功還是很重要的猜极,熟練掌握總是百利而無一害中姜。

1、首先第一種就是我們常用的typeof()魔吐,它會(huì)將類型信息當(dāng)作字符串返回扎筒。如下:

console.log(typeof undefined); //undefined
console.log(typeof 5); //number
console.log(typeof true); //boolean
console.log(typeof 'hello world!'); //string

很完美對(duì)不對(duì)?但我們知道酬姆,這個(gè)世界幾乎沒有什么是完美的“履纾看看下面的栗子就知道了:

console.log(typeof ['h', 'e', 'l', 'l', 'o']); //object
console.log(typeof { name: 'susu', age: 3 }); //object
console.log(typeof null); //object
console.log(typeof new Date()); //object

打印出來的結(jié)果都是object類型辞色。通過上面的打印結(jié)果,我們知道typeof在判斷變量類型的時(shí)候比較適合用來處理基本數(shù)據(jù)類型浮定,如果是引用類型的值相满,typeof恐怕就心有余而力不足了。

2桦卒、instanceof:該運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性立美。

let arr = [1, 2, 3];
let obj = { name: 'susu', age: 3 };
console.log(obj instanceof Array); //false
console.log(obj instanceof Object); //true

通過instanceof很容易就能判斷一個(gè)變量是數(shù)組還是對(duì)象,貌似比typeof要高級(jí)了一些方灾。但如果遇到數(shù)組建蹄,情況可能跟我們想象的不一樣了碌更。

let arr = [1, 2, 3];
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true

為什么都是true呢?看看上面instanceof運(yùn)算符的定義洞慎,是用來測(cè)試一個(gè)對(duì)象在原型鏈上是否存在一個(gè)構(gòu)造函數(shù)的prototype屬性痛单。只要熟悉原型鏈就會(huì)知道,每個(gè)對(duì)象都有一個(gè)proto屬性劲腿,指向創(chuàng)建該對(duì)象的函數(shù)的prototype旭绒。instanceof的判斷規(guī)則是通過proto和prototype能否找到同一個(gè)引用對(duì)象。通過打印下面的等式焦人,我們就能知道為什么上面的栗子都會(huì)打印出true挥吵。

console.log(arr.__proto__.__proto__ === Object.prototype); //true
console.log(arr.__proto__ === Array.prototype); //true

3、constructor:此屬性返回對(duì)創(chuàng)建此對(duì)象的數(shù)組函數(shù)的引用

let arr = [1, 2, 3];
let obj = { name: 'susu', age: 3 };
console.log(arr.constructor === Array); //true
console.log(arr.constructor === Object); //false
console.log(obj.constructor === Array); //false
console.log(obj.constructor === Object); //true

4花椭、Object.prototype.toString.call():在js中該方法可以精準(zhǔn)的判斷對(duì)象類型忽匈,也是推薦使用的方法。

可以判斷基本數(shù)據(jù)類型:

console.log(Object.prototype.toString.call(3)); //[object Number]
console.log(Object.prototype.toString.call(true)); //[object Boolean]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call('hello')); //[object String]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]

也可以判斷引用數(shù)據(jù)類型:

let arr = [1, 2, 3];
let obj = {name: 'susu', age: 3};
let date = new Date();
function fn(){console.log('hello world!')}; 
       
console.log(Object.prototype.toString.call(arr)); //[object Array]    
console.log(Object.prototype.toString.call(obj)); //[object Object]      
console.log(Object.prototype.toString.call(date)); //[object Date]      
console.log(Object.prototype.toString.call(fn)); //[object Function]

以上个从。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脉幢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗦锐,更是在濱河造成了極大的恐慌嫌松,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奕污,死亡現(xiàn)場(chǎng)離奇詭異萎羔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碳默,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門贾陷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘱根,你說我怎么就攤上這事髓废。” “怎么了该抒?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵慌洪,是天一觀的道長。 經(jīng)常有香客問我凑保,道長冈爹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任欧引,我火速辦了婚禮频伤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芝此。我一直安慰自己憋肖,他們只是感情好因痛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬哼,像睡著了一般婚肆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坐慰,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天较性,我揣著相機(jī)與錄音,去河邊找鬼结胀。 笑死赞咙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糟港。 我是一名探鬼主播攀操,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秸抚!你這毒婦竟也來了速和?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤剥汤,失蹤者是張志新(化名)和其女友劉穎颠放,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吭敢,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碰凶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹿驼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲低。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖畜晰,靈堂內(nèi)的尸體忽然破棺而出砾莱,到底是詐尸還是另有隱情,我是刑警寧澤凄鼻,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布恤磷,位于F島的核電站,受9級(jí)特大地震影響野宜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魔策,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一匈子、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闯袒,春花似錦虎敦、人聲如沸游岳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胚迫。三九已至,卻和暖如春唾那,著一層夾襖步出監(jiān)牢的瞬間访锻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工闹获, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留期犬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓避诽,卻偏偏與公主長得像龟虎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沙庐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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