无法更改从localStorage检索到的Object的属性

时间:2014-10-21 21:17:34

标签: javascript jquery

我正在使用以下代码段来检索以前存储在localStorage中的对象,但出于某种原因,在尝试修改它时,对象仍然是不可变的。

这是我创建对象的方式:

if(typeof(Storage) !== "undefined") {
    if(!localStorage.Obj){
        localStorage.Obj = new Object();
    }
    var Obj = localStorage.Obj;

} else {
    if(!$.cookie("Obj")){
        $.cookie("Obj", new Object(), {
            expires : 7, // Days
            domain  : 'localhost:8080',
            secure  : true
        });
    }
    var Obj = $.cookie("Obj");
}

这是我尝试修改对象的地方:

var login = function(email, passwd){

    $.ajax({
        url: "http://127.0.0.1/api/v1/login",
        type: "POST",
        data: { email: email, password: SHA256_hash(passwd), platform: getBrowserName(), osVersion: getOsName()},
        beforeSend: function(xhr){xhr.setRequestHeader('apiKey', "46d1e2f6-cf37-4275-bc1c-d674b12cc9bf");},
        success: function(data, status, xhr){
            Obj["logged_in"] = true;
            Obj["sessionKey"] = data.sessionKey;
            Obj["user_id"] = data.userID;
            Obj["time_format"] = data.timeFormat;
            Obj["first_name"] = data.firstName;
            Obj["last_name"] = data.lastName;
        },
        error: function(data, status, xhr){
            console.log(data);
        }
    });

    if(Obj.logged_in){
        window.location.replace("http://127.0.0.1/users/" + Obj.user_id + "/todos");
    }   
};

我需要指出三件事:

  • 我正在使用jQuery
  • 2个代码位于不同的文件中,但加载顺序是正确的。
  • 使用console.log(Obj)时,我得到以下输出:"[object Object]"
  • 提前致谢。

2 个答案:

答案 0 :(得分:1)

基本问题是localStorage只存储字符串数据。

对于数组和对象,但是可以使用JSON.stringify()将它们简单地转换为字符串,当从localStorage中提取时,可以使用JSON.parse()将字符串转换为javascript对象或数组

有用的小型图书馆是 store.js

答案 1 :(得分:0)

How do I correctly clone a JavaScript object?

来自Pascal的回答: 使用jQuery,您可以使用:

进行浅层复制
var copiedObject = jQuery.extend({}, originalObject)

对copiedObject的后续更改不会影响originalObject,反之亦然。

或制作深层照片:

var copiedObject = jQuery.extend(true, {}, originalObject)