TypeScriptに入門したいのでJavaScriptに入門してみる(暗黙的な型変換)
続: JavaScript入門
教材は
暗黙的な型変換
等価演算子などで暗黙的に型変換される例が載っているが、必要性は薄く基本的には ===
を使うようにすべき。
暗黙的な変換は割とひどい仕様が載っている…
明示的な型変換
任意の値 -> 真偽値
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.parseInt
や Number.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になってしまうため、デバッグが難しくなる。
JSDoc
JSではコメントで引数の型を記述する書式として JSDoc が有名。
JavaDocみたいな感じですね。