LoginSignup
0
0

More than 3 years have passed since last update.

【備忘録】プリミティブ値とラッパーオブジェクト【TypeScript】

Last updated at Posted at 2020-12-21

プリミティブ値

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 型
    • プリミティブはtruefalse
  • Number 型
    • 数値を扱うデータ型。
  • BigInt 型
    • Number 型より大きな数値を扱うためのデータ型。Number 型と代入や計算、等値比較などはできない。
  • String 型
    • 文字列を扱うためのデータ型。
  • Null 型
    • プリミティブ型nullは何のデータも存在してない状態を明示的に示す
  • Undefined 型
    • プリミティブ値undefinedが割り当てられるもの
    • 宣言のみが行われた変数
    • オブジェクト内の存在しないプロパティへのアクセス
  • Symbol 型
    • Synbol()関数がSymbol型の値を返す。
    • Booleannew Stringnew NnumberのようなプリミティブラッパーオブジェクトはSymbol型には存在しないため、もしラッパーオブジェクトを生成したいのであれば、Object()関数を使用できる。
  Symbol("foo") === Symbol("foo"); // false

  let sym = Symbol("foo");
  typeof sym; //  'symbol'
  // Objectでラッパーオブジェクトを生成
  let symObj = Object(sym);
  typeof symObj; //  'object'

ラッパーオブジェクト

  • ラッパーオブジェクトとは nullundefined 以外のプリミティブ型を抱合するもの。string 型のラッパーオブジェクトは String、number 型のラッパーオブジェクトは Number など。
  • ラッパーオブジェクトは valueOf()メソッドでプリミティブ値を取り出せる。
> const str1 = 'hogehoge';
> const str2 = new Srtring('hogehoge');
> str1 === str2
false
> str1 === str2.valueOf()
true
  • プリミティブ型の値に対してアクセスするとき、対応するラッパーオブジェクトに自動変換するという仕様がある。

何か指摘等ございましたら、コメントでお願いいたします。

参考

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0