TypeOf這些知識(shí)點(diǎn)你了解嗎
昨天給同事一起玩耍,同事給我出了一道代碼題目,是關(guān)于typeof的,感覺(jué)挺好玩的,在此分享給大家,順便鞏固下自己對(duì)typeof知識(shí)點(diǎn)的總結(jié)。如有不對(duì),請(qǐng)給予指出,共同進(jìn)步。
代碼是這樣的:
<!DOCTYPE html> <head> <title>typeof</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> </head> <body> <script> var a= a||null; var b= c||null; var c= typeof f; console.log(a); console.log(b); console.log(c); </script> </body> </html>
那么,你說(shuō)運(yùn)行該代碼,chrome調(diào)試器會(huì)打印什么呢?
請(qǐng)看,效果圖
為什么會(huì)出現(xiàn)這個(gè)結(jié)果呢?
首先分析上圖中的兩個(gè)null
因?yàn)镴avascript在執(zhí)行代碼之前,會(huì)先預(yù)解析(hoisting)。
什么是預(yù)解析(hoisting)呢?
就是在JavaScript中,你可以在函數(shù)的任何位置聲明多個(gè)var語(yǔ)句,它們就像在函數(shù)的頂部聲明一樣發(fā)揮作用,且會(huì)給var聲明的變量賦予一個(gè)undefined的初始值。這種行為我們稱之為預(yù)解析(hoisting)。
所以呢,在執(zhí)行以上代碼前,Javascript會(huì)首先將所有的var變量(a,b,c)預(yù)解析(hoisting),當(dāng)執(zhí)行a||null時(shí),a是undefined的,又因?yàn)槭莬|運(yùn)算,所以結(jié)果就是null咯。
c||null是一個(gè)道理。
再來(lái)看看,為什么typeof f會(huì)是undefined呢?f都沒(méi)定義,不應(yīng)該會(huì)報(bào)錯(cuò)嗎?
是的,倘若我們?nèi)ナ褂靡粋€(gè)未定義的變量,瀏覽器是會(huì)報(bào)錯(cuò)的。
但是,當(dāng)用typeof去判斷一個(gè)未定義的變量,將返回undefined。
那typeof判斷值類型時(shí),是個(gè)怎么機(jī)制呢?總結(jié)如下:
1、 對(duì)于數(shù)字類型的值,typeof會(huì)返回number,注意:NaN也是一個(gè)數(shù)字類型,因?yàn)樗贘avaScript中代表的是特殊非數(shù)字值。
2、 對(duì)于字符串類型的值,typeof會(huì)返回string。
3、 對(duì)于布爾類型的值,typeof會(huì)返回boolean。
4、 對(duì)于對(duì)象,數(shù)組,null而言,typeof會(huì)返回object
5、 對(duì)于函數(shù)類型而言,typeof返回function
6、 如果運(yùn)算數(shù)沒(méi)有定義(不存在或未賦值),將會(huì)返回undefined。
相關(guān)文章
SVG動(dòng)畫vivus.js庫(kù)使用小結(jié)(實(shí)例代碼)
本文通過(guò)代碼給大家介紹SVG動(dòng)畫vivus.js庫(kù)使用小結(jié),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09