创建一个名为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);
从localStorage读取后设置对象并进行字符串化:
localStorage.setItem('car',car);
car = localStorage.getItem('car');
car = JSON.stringify(car);
stringify后的汽车-----------------> [object object]在file:/// android_asset / www / ...
将对象和对象设置为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 ----->未定义
答案 0 :(得分:17)
根据我的理解,一旦字符串化,你就不能使用你的字符串化对象,因为它不再是一个对象。这是一个字符串。
因此,当您尝试对字符串执行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读取。
答案 1 :(得分:10)
您无法存储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
答案 2 :(得分:0)
我最近遇到了同样的问题。看看我写的这个脚本 https://github.com/andresgallo/truStorage
它允许存储和检索本地存储中的对象。如果需要,它会自动将对象作为对象返回。另一件事是您还在嵌套对象中设置和获取项目。最重要的是它是一个小小的脚本。
答案 3 :(得分:0)
最新的浏览器现在支持localStorage
本地对象。我已经使用Chrome v44和Firefox v34测试了这个:
localStorage
Storage {debug: "undefined", uid: "3", length: 2}
typeof localStorage
"object"
所以从现在开始。你会没事的。