先日、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
などにも対応できるよう