0

localStorage に配列をストックしようとしましたが、それは不可能であると読みました。だから私はそれを試しました:

    array = {};
    array.name =        $('[name="name"]').val();
    array.username =    $('[name="username"]').val();
    array.password =    $('[name="password"]').val();
    
    alert(localStorage['accounts']);
    local = JSON.parse(localStorage['accounts']);
    localu = local.push(array);
    alert(JSON.stringify(localu));

実際、スクリプトは「[]」を返す最初のアラートで停止します (結果を確認するために以前にその値を入力しました)。

スクリプトが機能しないのはなぜですか?

4

1 に答える 1

0

JavaScript{}はオブジェクトです。[]配列です。

var array = []そしてvar array = new Array()同じことをします。

配列はものの順序付けられたコンテナーであり、各値にはキーではなくインデックスがあります。

オブジェクトは名前付きのコンテナーであり、各「もの」にはキーがあります。

あなたarrayは間違いなくオブジェクトです。

var data = {};
data.name =        $('[name="name"]').val();
data.username =    $('[name="username"]').val();
data.password =    $('[name="password"]').val();

alert(localStorage['accounts']);
// > undefined OR the value
local = JSON.parse(localStorage['accounts']);
// local contains a parsed version of localStorage['accounts']
localu = local.push(array);
// localu = 0 (push returns the length i think?)
alert(JSON.stringify(localu));

以下を試してください。私はそれをテストしていませんが、うまくいくかもしれません。

var data = {};
data.name =        $('[name="name"]').val();
data.username =    $('[name="username"]').val();
data.password =    $('[name="password"]').val();

if (localStorage['accounts'] == undefined) { // fixed
// does the key exist? No so create something to get us started
   localu = { accounts: [] };
} else {
// the key exists! lets parse it
   localu = JSON.parse(localStorage['accounts']);
}
// add the new "data" to the list
localu.accounts.push(data);
// save the results (we have to stringify it)
localStorage['accounts'] = JSON.stringify(localu);
于 2013-04-04T23:40:36.790 に答える