2011-07-06 12 views
2

Html5を使用すると、localStorageの値は文字列として格納されます。これは、チェックボックスの状態を保存して後で復元する場合に対処する必要があるものです。私はこのような何かがうまくいくことを期待していた:JS: "false"をfalseに強制的に強制することはできますか?

(function() { 
    function e(id) { return document.getElementById(id); } 

    e('save').addEventListener('click', function() { 
    localStorage['check-value'] = e('checkbox').checked 
    }) 
    e('checkbox').checked = localStorage['check-value']; 
})(); 

しかし、ボックスがチェックされていない場合は、「チェック値が」"false"の線に沿って何かを保存するようだと、文字列"false"trueに型強制さを取得しますその2行目から最後の行に私は少しテストをすることができることを知っているが、これは趣味のプロジェクトのためであり、私は可能な限りそれを把握したい。 "false"を強制的にfalseにすることはできますか?

私はこのbtwのためにライブラリを使用していません。そのクロムの拡張子と私は軽量化したいからです。

答えて

3

"false"は他の文字列と同じですので、ここで独自のチェックをする必要があります。

+0

それは確かにfalsy値:) –

+1

である「」とは異なり使用することができます

は、別の方法としては、三項演算子を使用することができます –

0

変更この行:これまで

e('checkbox').checked = localStorage['check-value']; 

e('checkbox').checked = localStorage['check-value'] == "true"; 

またはあなたが望むものに依存する:

e('checkbox').checked = localStorage['check-value'] != "false"; 

あなたはこの以上の数回を行う場合は、ラップboolean trueまたはfalseだけを返す小さな関数内のブール型ローカルストレージへのアクセス。

function tfStr(val) { 
    return(val === "true"); 
} 
2

JSON.parseを使用して値を引き出せます。理想的には、JSON.stringifyを使用してオブジェクトなどをシリアル化することもできます。これは、他のインタフェースの後ろで抽象化することで、これをより管理しやすくすることができます。ラッパーの

JSON.parse("false") == false 

例:

var LocalStorageManager = new (function() { 
    this.set = function (key, object) { 
     localStorage[key] = JSON.stringify(object); 
    }; 

    this.get = function (key) { 
     return JSON.parse(localStorage[key]); 
    }; 
}); 
+0

これは問題を引き起こす可能性があると言いましたが、localStorageをサポートするブラウザでもJSONもサポートする必要があります。 – AlicanC

+0

そう思っていましたが、JSONを呼び出す必要はないと思います。これはしばしばchrであることを解析するこれはすべてのページで実行されるようになりました。 –

+0

@George Mauer:試してみてください。たくさんのデータがない限り、ユーザーはJSON.parseと友人からの小さなオーバーヘッドに気づくことさえありません。 –

3

あなたはそれが「偽」の文字列に等しいのですかどうかをテストすることができます。また

e('checkbox').checked = localStorage['check-value'] != 'false'; 

、あなたはあなたの前に数にそれを強制することができます保管しておき、取り出した後:

localStorage['check-value'] = +e('checkbox').checked 
// ... 
e('checkbox').checked = +localStorage['check-value'] 
+0

私は数字に強制的に何かを考えていましたが、あなたのコードは 'var str =" false "とは思えませんでした。 + str; 'コンソール出力でNaN –

+0

これを2回強制します。したがって、それを格納する前に、 'false'が' 0'に変換されます。そして、あなたがそれを取得すると、文字列 '' 0 ''は強制的に数字「0」に戻り、JavaScriptは' 'false''になります。 –

1

あなたはJSでそれを本当にすることはできません。 var boolValue = (stringValue !== 'false')を使用するか、ボートを浮かべてください。

0

はちょうどここにリフが、文字列が、それはブール値falseに評価されますfalseの場合は、

eval(localStorage['check-value'])

のような愚かな何か本当にを行うことができます。明らかに、それは主要なセキュリティホールであるため、これをやりたくはありません。、私は私が言っている必要がありますね

(localStorage['check-value']==="false")?false:localStorage['check-value'];

+0

実際、それは面白いです - それはセキュリティホールでしょうか?私はlocalStorageルールについてはっきりしていませんが、そこに置かれている唯一のものは、そこに配置されたドメインのコードです。悪意のあるコードがlocalStorageにある場合は、既に実行して損害を与える可能性があることを意味します。この推論のラインで間違っていますか? –

0

あなたは/true/i.test(localStorage['check-value'])

関連する問題