TypeScriptに入門したいのでJavaScriptに入門してみる(暗黙的な型変換)

続: JavaScript入門

これ の続き。

教材は

https://jsprimer.net/

暗黙的な型変換

等価演算子などで暗黙的に型変換される例が載っているが、必要性は薄く基本的には === を使うようにすべき。

暗黙的な変換は割とひどい仕様が載っている…

明示的な型変換

任意の値 -> 真偽値

Boolean("string"); // -> true

任意の値を真偽値に変換できるが、どの値がtrueに、どの値がfalseになるのかは

  • falsy な値が falseになる
  • falsy でない値は true になる

というルールに従う。 falsy な値とは以下の6種類である。

  • false
  • undefined
  • null
  • 0
  • NaN
  • ”” (空文字)

数値 -> 文字列

String(1); // -> 1

真偽値に対しては Stringで true または false という文字列になる。同じように null, undefined, シンボルのプリミティブ型の値に対しては変換は見た目通りの文字列を得ることができる。

オブジェクトを文字列にしたい場合は、 JSON.stringify などのより適切な方法を使うべきである。

シンボル -> 文字列

String(Symbol("シンボルの説明"));

文字列 -> 数値

ユーザからの入力を数値にする場合などに使う。

// ユーザー入力を文字列として受け取る
const input = window.prompt("数字を入力してください", "42");
// 文字列を数値に変換する
const num = Number(input);

Number.parseIntNumber.parseFloat といった方法もある。渡された文字列が数字じゃない場合は NaN が返る。

NaNは Number型

  • Not a Number の略称が NaN
  • NaN は何と演算しても結果が NaN
  • typeof NaN -> number
  • NaN は自分自身と一致しない

NaNは自分自身と一致しない性質があるので、これを利用してある値が NaN かどうかを判定できる。

function isNaN(x) {
    // NaNは自分自身と一致しない(NaN以外の値は厳密等価演算子で比較すると一致する)
    return x !== x;
}

なおすでに Number.isNaN というメソッドがあるので、そちらを利用すべき。

NaNは暗黙的な型変換では最も避けるべき値

NaNは何と演算しても結果がNaNになってしまうため、デバッグが難しくなる。

JSではコメントで引数の型を記述する書式として JSDoc が有名。

https://jsdoc.app/

JavaDocみたいな感じですね。