1. ホーム
  2. javascript

[解決済み] LocalStorageにboolean値を設定できない?

2022-02-11 15:20:19

質問

でブーリアン値を設定できないことに気づきました。 localStorage ?

localStorage.setItem("item1", true);
alert(localStorage.getItem("item1") + " | " + (localStorage.getItem("item1") == true));

常にアラートを表示 true | false をテストしようとすると localStorage.getItem("item1") == "true" という警告が出る.の項目を設定するにはどうしたらよいですか? localStorage を true に設定できますか?

たとえ文字列であっても、その中に含まれるのは === は型をチェックするのでしょうか?

だから

alert("true" == true); // should be true? 

解決方法は?

Firefox の Storage の実装 は文字列しか保存できませんが 2009年9月 W3Cは、どんなデータでも受け入れるように草案を修正しました。 実装が(まだ)追いついていない ( 以下の編集を参照してください。 ).

つまり、あなたの場合、booleanは文字列に変換されるのです。

なぜかというと "true" != true で書かれているように の記述では、イコール( == )をMDCで使用することができます。 *:

2 つのオペランドが同じ型でない場合、JavaScript はオペランドを変換し、厳密な比較を適用します。オペランドが数値またはブーリアンである場合、オペランドは次のように変換されます。 数値 もしどちらかのオペランドが文字列であれば、もう一方のオペランドも文字列に変換されます。

なお、文字列が変換されるのは 番号 の代わりに ブーリアン . このため "true" を数値に変換したものは NaN の場合、何にも等しくならないので false が返されます。

(*: 実際の規格については、ECMA-262 §11.9.3 "The Abstract Equality Comparison Algorithm" を参照してください)


編集する setItem インタフェースで文字列のみを受け付けるように戻されました。 2011年9月第1草案 というのも、どのベンダも文字列でないものの保存をサポートすることに興味がないからです。参照 https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 をご覧ください。