【问题标题】:Setting and getting object to local storage using stringify?使用 stringify 设置和获取对象到本地存储?
【发布时间】:2012-08-16 14:12:09
【问题描述】:

创建一个名为 car 的对象:

function car(temp){

    this.brand=temp[0];
    this.color=temp[1];
    this.year=temp[2];
}

var temp = ['Skoda', 'Red', '2012'];
car = new car(temp);
  1. 从localStorage读取后设置对象和字符串化:

    localStorage.setItem('car',car);
    car = localStorage.getItem('car');
    car = JSON.stringify(car);
    

    字符串化后的汽车----------------> [object Object] at file:///android_asset/www/...

  2. Stringify 对象并在其后将对象设置为 localStorage: localStorage.setItem('car',JSON.stringify(car)); car = localStorage.getItem('car');

字符串化后的汽车-----------------> "{\"brand\":\"Skoda\",\"color\":\"Red\", \"year\":\"2012\"}" at file:///android_asset/www/...

问题1:为什么字符串化对象的顺序会有所不同?

问题2:为什么我不能使用这样的字符串化对象:

08-21 11:49:14.860: I/Web Console(9642): car after stringify----------------->     {"brand":"Skoda","color":"Red","year":"2012"}

console.log("car.brand----->" +car.brand); car.name----->未定义

【问题讨论】:

    标签: javascript object local-storage stringify


    【解决方案1】:

    据我了解,一旦字符串化对象,您将无法使用它,因为它不再是对象。这是一个字符串。

    因此,当您尝试对字符串执行 car.brand 时,没有属性 brand

    就我个人而言,我认为最好的做法是这样做。

     function car(temp){
         this.brand=temp[0];
         this.color=temp[1];
         this.year=temp[2];
     }
    
     var temp = ['Skoda', 'Red', '2012'];
     car = new car(temp);
    
     localStorage.setItem('car',JSON.stringify(car)); 
     car = localStorage.getItem('car');
     car = JSON.parse(car);
    

    这意味着汽车对象现在不是字符串而是对象。

    执行此操作时,还使用 ​​stringify 写入本地存储并使用 parse 读取。

    【讨论】:

      【解决方案2】:

      最新的浏览器现在原生支持 localStorage 作为对象。我已经用 Chrome v44 和 Firefox v34 对此进行了测试:

      localStorage
      Storage {debug: "undefined", uid: "3", length: 2} 
      
      typeof localStorage
      "object"
      

      所以从现在开始。你会没事的。

      【讨论】:

      • 实际上,localStorage 本身就是一个对象(这就是您上面的示例所示),但它仍然只将您的数据存储为字符串。你可能会想到 Chrome 自己的存储 API,chrome.storage,它与 localStorage 相同,但有一些扩展,包括本地存储对象的能力:developer.chrome.com/extensions/storage(可能 Firefox 也有类似的东西,虽然我没有检查。)
      【解决方案3】:

      我最近也遇到了同样的问题。看看我写的这个脚本。
      https://github.com/andresgallo/truStorage

      它允许在本地存储中存储和检索对象。如果需要,它将自动将对象作为对象返回。另一件事是您还设置和获取嵌套对象中的项目。最好的部分是它的脚本很小。

      【讨论】:

        【解决方案4】:

        你不能存储 JavaScript 对象是 localStorage,see this question

        所以使用第二个选项。首先将对象字符串化并存储它。稍后将其拾取并解析为 javascript 对象。

        localStorage.setItem('car',JSON.stringify(car));
        carString = localStorage.getItem('car');
        car = JSON.parse(carString);
        console.log(car.brand); // Skoda
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-02
          • 1970-01-01
          • 2021-03-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-18
          • 1970-01-01
          相关资源
          最近更新 更多