Type in JavaScript


作者:李ヒョン雨
書く意図:JavaScriptの基礎を一緒に見てみましょう!特にスタティックタイプの開発でJavaScriptに触れた方は、この記事を読むと助かります.

概要


Javaまたはcortlinの「静的タイプ」言語を使用する開発者はjavascriptについて話すと、「タイプ概念のない」言語を話すことが多い.しかし、JavaScriptの書籍を読むと、JavaScriptの内蔵タイプを説明する部分が見えてきます.では、私たちがよく使う「タイプ」と、彼らが使う「タイプ」の概念の違いは何でしょうか.

タイプ変数ではなく値を付与


通常、ジャワやコトリンには変数タイプが与えられます.
val name: String = "Nunu Lee"
val onePlusOneIs: Int = 2
ただし、javascriptは上記のようにタイプを付与しません.
let anyThingInHere = 2
anyThingInHere = 'Nunu' // Possible
このような特性を見ると,静的タイプの開発者は「javascriptにはタイプの言語がない」という錯覚を起こしやすい.ただしjavascriptでは,タイプは変数を付与するのではなく,値自体を付与する.すなわち、変数のタイプは、値に委任されたタイプと見なすことができる.
var a = 42;
typeof a; // "number"

a = false;
typeof a // "boolean

undefined is "it is not defined"?


JavaScriptの組み込みタイプにはundefinedというタイプがあります.このタイプはどんなタイプですか?次の問題を見て推論する.
var a;

a;
b;
上記の手順でChromeコンソールを撮るとどんな結果になりますか?a,bはそれぞれ値,変数が定義されていない場合である.上記の未定義タイプによれば、a、bの両方に未定義タイプが現れるはずであり、結果は以下の通りである.


驚くべきことに、aはundefiendを表示するが、bはReferenceErrorを表示する.では、undefinedをどのように説明すればいいのでしょうか.
undefinedはアクセス可能なscopeに変数がありますが、値は割り当てられていません.すなわち,初期化値を持たない変数は未定義と見なすことができる.ただし、変数さえ宣言していないとReferenceErrorが発生する場合、undaindedが持つ意味やレイアウトは混同される可能性がありますが、javascriptエンジンはこのように値を処理しているので、上記のように考えたほうがいいです.
ここでのもう一つの反転は、typeof演算子を使用して値のタイプを表示したらどうなりますか?
var a;
typeof a;
typeof b;

結果は本当に素晴らしいこの場合,bをundefinedとして扱うことで,開発者に混同の余地が多く,残念である.でもどうしよう、という言葉になってしまいました.このような現象があることを知っていれば、予防すればいいです.

追加)nullとtypeof


おなじみかもしれませんが、JavaScriptではnullのタイプはobjectです.これはtypeofで知ることができます.

では、この変数がnullであるかどうかをどのように判断しますか?JavaScriptで、強制的にbooleanに変換する場合、以下に示すように値をfalseに変換できます.
  • undefined
  • null
  • false
  • +0, -0, NaN
  • ""
  • 上記の結果だけを見るとobjectタイプのnullのみがfalsey値であることがわかります.したがって、変数の値がnullであるか否かを決定する条件文を作成することができる.
    var a = null;
    (!a && typeof a === "object"); //true