プリミティブ値
TypeScript,JavaScript初学者がプリミティブ値とラッパーオブジェクトについて勉強したのでメモを残す。
静的型付け言語 vs 動的型付け言語
- どちらも型は存在する(動的片付け言語は型がないと言われがちだがソンナコトナイヨ)
- 静的型付け言語は変数や、関数の引数及び戻り値の型がプログラムの実行前にあらかじめ決まっていなければならない
- 動的型付け言語はそれらが実行時の値によって文字通り動的に変化するということ
JavaScrip(動的型付け言語) の場合
$ node
> let val = 100;
> val = 'hoge';
'hoge'
その他の動的型付け言語
- Python
- Ruby
- PHP など
TypeScript(静的型付け言語) の場合
$ ts-node
> let val = 10;
> val = '200';
200
> val = 'hoge';
[eval].ts:3:1 - error TS2322: Type '"hoge"' is no assignable to type 'number'.
- TypeScrip は
let
で変数宣言してもデータ型が異なると値の再代入はコンパイルエラーになる。
その他の静的型付け言語
- C/C++
- C#
- Java
- Swift など
JavaScript のプリミティブ型
JavaScript は値がプリミティブでありオブジェクトではない、インスタンスメソッドを持たないデータである
-
Boolean 型
- プリミティブは
true
とfalse
- プリミティブは
-
Number 型
- 数値を扱うデータ型。
-
BigInt 型
- Number 型より大きな数値を扱うためのデータ型。Number 型と代入や計算、等値比較などはできない。
-
String 型
- 文字列を扱うためのデータ型。
-
Null 型
- プリミティブ型
null
は何のデータも存在してない状態を明示的に示す
- プリミティブ型
-
Undefined 型
- プリミティブ値
undefined
が割り当てられるもの - 宣言のみが行われた変数
- オブジェクト内の存在しないプロパティへのアクセス
- プリミティブ値
-
Symbol 型
-
Synbol()
関数がSymbol型の値を返す。 -
Boolean
やnew String
、new Nnumber
のようなプリミティブラッパーオブジェクトはSymbol型には存在しないため、もしラッパーオブジェクトを生成したいのであれば、Object()
関数を使用できる。
-
Symbol("foo") === Symbol("foo"); // false
let sym = Symbol("foo");
typeof sym; // 'symbol'
// Objectでラッパーオブジェクトを生成
let symObj = Object(sym);
typeof symObj; // 'object'
ラッパーオブジェクト
-
ラッパーオブジェクトとは
null
とundefined
以外のプリミティブ型を抱合するもの。string 型のラッパーオブジェクトはString
、number 型のラッパーオブジェクトはNumber
など。 - ラッパーオブジェクトは
valueOf()
メソッドでプリミティブ値を取り出せる。
> const str1 = 'hogehoge';
> const str2 = new Srtring('hogehoge');
> str1 === str2
false
> str1 === str2.valueOf()
true
- プリミティブ型の値に対してアクセスするとき、対応するラッパーオブジェクトに自動変換するという仕様がある。
何か指摘等ございましたら、コメントでお願いいたします。