先日、JSを書いていたときにハマったことのメモ。

まず、Boolean型(true・false)の変数をセッションストレージに保存し、保存した変数をセッションストレージから展開すると、型が文字列に変換されていた。

取り出したtrue・falseの文字列をBoolean型に変換しなおしたかったのだが、ここでつまづいた。

失敗例

はじめ、以下のコードでBoolean型にキャストしようと試みた。

var flgStr = 'true';
var flgBool = Boolean(flgStr);

console.log(flgBool);
// 出力結果: true

文字列trueBoolean()で変換すると正しく型変換をすることができたが、文字列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などにも対応できるよう