typeof知多少


昨天同事給我看了一道代碼題,是關於typeof的,感覺挺有意思的,在這里分享給大家,順便自己再對typeof總結總結。如有不對,請給予指出,共同進步。

代碼是這樣的:

 <!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調試器會打印什么呢?

請看,效果圖

 

為什么會出現這個結果呢?

首先分析上圖中的兩個null

因為Javascript在執行代碼之前,會先預解析(hoisting)。

什么是預解析(hoisting)呢?

就是在JavaScript中,你可以在函數的任何位置聲明多個var語句,它們就像在函數的頂部聲明一樣發揮作用,且會給var聲明的變量賦予一個undefined的初始值。這種行為我們稱之為預解析(hoisting)。

所以呢,在執行以上代碼前,Javascript會首先將所有的var變量(a,b,c)預解析(hoisting),當執行a||null時,a是undefined的,又因為是||運算,所以結果就是null咯。

c||null是一個道理。

再來看看,為什么typeof f會是undefined呢?f都沒定義,不應該會報錯嗎?

是的,倘若我們去使用一個未定義的變量,瀏覽器是會報錯的。

但是,當用typeof去判斷一個未定義的變量,將返回undefined。

那typeof判斷值類型時,是個怎么機制呢?總結如下:

1、  對於數字類型的值,typeof會返回number,注意:NaN也是一個數字類型,因為它在JavaScript中代表的是特殊非數字值。

2、  對於字符串類型的值,typeof會返回string。

3、  對於布爾類型的值,typeof會返回boolean。

4、  對於對象,數組,null而言,typeof會返回object

5、  對於函數類型而言,typeof返回function

6、  如果運算數沒有定義(不存在或未賦值),將會返回undefined。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM