先日、JSを書いていたときにハマったことのメモ。
まず、Boolean型(true・false)の変数をセッションストレージに保存し、保存した変数をセッションストレージから展開すると、型が文字列に変換されていた。
取り出したtrue・falseの文字列をBoolean型に変換しなおしたかったのだが、ここでつまづいた。
失敗例
はじめ、以下のコードでBoolean型にキャストしようと試みた。
var flgStr = 'true';
var flgBool = Boolean(flgStr);
console.log(flgBool);
// 出力結果: true
文字列trueをBoolean()で変換すると正しく型変換をすることができたが、文字列falseの場合は、型は変換できたが結果がtrueとして返ってきてしまった。
var flgStr = 'false';
var flgBool = Boolean(flgStr);
console.log(flgBool);
// 出力結果: true
これは、Boolean()は空の文字列以外の場合、全てtrueとして返す関数となっているためである。
Boolean型に変換する正しい方法
正しく型変換をおこなう場合、JSON.parseを使う方法が一番シンプルだ。
var flgStr = 'false';
var flgBool = JSON.parse(flgStr.toLowerCase());
console.log(flgBool);
// 出力結果: false
JSON.parseに与える文字列はtrueまたはfalseでなければ正しく変換がおこなわれないため、toLowerCaseメソッドを実行している。
※今回のケースでは不要だがTRUEなどにも対応できるよう