昨日、同僚とコーディングに関する質問をしました。それはとても面白かったので、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 デバッガーは何を出力するでしょうか?
レンダリングをご覧ください
この結果はなぜ起こるのでしょうか?
まず、上の図の 2 つの null を分析します
JavaScript はコードを実行する前に事前解析 (ホイスティング) を行うためです。
ホイスティングとは何ですか?
つまり、JavaScript では、関数内の任意の場所で複数の var ステートメントを宣言でき、それらのステートメントは関数の先頭で宣言されたかのように機能し、var で宣言された変数の初期値として unknown が与えられます。この動作はホイスティングと呼ばれます。
したがって、上記のコードを実行する前に、JavaScript は最初にすべての var 変数 (a、b、c) を事前解析 (ホイスト) します。したがって、結果は null になります。
c||null は真実です。
もう一度見てみましょう。なぜ typeof f が未定義なのでしょうか? f が定義されていない場合、エラーが報告されるべきではないでしょうか?
はい、未定義の変数を使用すると、ブラウザはエラーを報告します。
ただし、typeof を使用して未定義の変数を決定すると、unknown が返されます。
typeof が値の型を決定するために使用するメカニズムは何ですか?概要は次のとおりです。
1. 数値型の値の場合、typeof は数値を返します。 注: NaN は JavaScript で特殊な非数値を表すため、数値型でもあります。
2. 文字列型の値の場合、typeof は文字列を返します。
3. ブール型値の場合、typeof はブール値を返します。
4. オブジェクト、配列、null の場合、typeof は object
を返します。5. 関数型の場合、typeof は function
を返します。6. オペランドが定義されていない (存在しない、または値が割り当てられていない) 場合は、unknown が返されます。