Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t更改从localStorage检索的对象的属性_Javascript_Jquery - Fatal编程技术网

Javascript Can';t更改从localStorage检索的对象的属性

Javascript Can';t更改从localStorage检索的对象的属性,javascript,jquery,Javascript,Jquery,我使用下面的代码片段来检索以前存储在localStorage中的对象,但是由于某些原因,当试图修改它时,该对象仍然是不可变的 以下是我创建对象的方式: if(typeof(Storage) !== "undefined") { if(!localStorage.Obj){ localStorage.Obj = new Object(); } var Obj = localStorage.Obj; } else { if(!$.cookie("Ob

我使用下面的代码片段来检索以前存储在
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");
    }   
};
这是我尝试修改对象的地方:

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
  • 这两个代码位于不同的文件中,但加载顺序是正确的
  • 使用
    console.log(Obj)
    时,我得到以下输出:
    “[object object]”
  • 提前谢谢。
      根本的问题是localStorage只存储字符串数据

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

      有帮助的小型库是

      根据帕斯卡的回答: 使用jQuery,您可以使用以下工具进行浅层复制:

      var copiedObject = jQuery.extend({}, originalObject)
      
      对复制对象的后续更改不会影响原始对象,反之亦然

      或制作深度副本:

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

      了解本地存储的工作原理。。。它只存储字符串数据。您可以使用JSON.stringify()和JSON.parse()进行转换。我看到,我一转换为JSON字符串并加载它,它就可以正常工作。请将您的答案添加为正式答案,以便我可以在将来将其设置为正确答案。