TypeOf這些知識點你了解嗎
昨天給同事一起玩耍,同事給我出了一道代碼題目,是關(guān)于typeof的,感覺挺好玩的,在此分享給大家,順便鞏固下自己對typeof知識點的總結(jié)。如有不對,請給予指出,共同進(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>
那么,你說運行該代碼,chrome調(diào)試器會打印什么呢?
請看,效果圖
為什么會出現(xiàn)這個結(jié)果呢?
首先分析上圖中的兩個null
因為Javascript在執(zhí)行代碼之前,會先預(yù)解析(hoisting)。
什么是預(yù)解析(hoisting)呢?
就是在JavaScript中,你可以在函數(shù)的任何位置聲明多個var語句,它們就像在函數(shù)的頂部聲明一樣發(fā)揮作用,且會給var聲明的變量賦予一個undefined的初始值。這種行為我們稱之為預(yù)解析(hoisting)。
所以呢,在執(zhí)行以上代碼前,Javascript會首先將所有的var變量(a,b,c)預(yù)解析(hoisting),當(dāng)執(zhí)行a||null時,a是undefined的,又因為是||運算,所以結(jié)果就是null咯。
c||null是一個道理。
再來看看,為什么typeof f會是undefined呢?f都沒定義,不應(yīng)該會報錯嗎?
是的,倘若我們?nèi)ナ褂靡粋€未定義的變量,瀏覽器是會報錯的。
但是,當(dāng)用typeof去判斷一個未定義的變量,將返回undefined。
那typeof判斷值類型時,是個怎么機(jī)制呢?總結(jié)如下:
1、 對于數(shù)字類型的值,typeof會返回number,注意:NaN也是一個數(shù)字類型,因為它在JavaScript中代表的是特殊非數(shù)字值。
2、 對于字符串類型的值,typeof會返回string。
3、 對于布爾類型的值,typeof會返回boolean。
4、 對于對象,數(shù)組,null而言,typeof會返回object
5、 對于函數(shù)類型而言,typeof返回function
6、 如果運算數(shù)沒有定義(不存在或未賦值),將會返回undefined。