Localstorage& JSON.parse:如果没有值,JS停止工作?

时间:2011-11-14 16:30:37

标签: jquery json variables local-storage

对不起,如果标题是某种误解。 如果我尝试使用json从localstorage解析值并且没有值,那么我在使用Web应用程序时遇到了一些问题。

例如:

如果你这样做:alert(localStorage.getItem("something"));你得到null:http://jsfiddle.net/yrGht/

但是如果你这样做会阻止一切:alert(JSON.parse(localStorage["test"]));你什么也得不到,它会阻止一切工作:http://jsfiddle.net/7tCaS/

我如何解决这个问题,以便我提醒第一个,如果它没有值,那么继续工作,因为基本上我想设置它:JSON.parse(localStorage["test"])作为全局变量,但它会阻止其他所有内容:{{3} }

2 个答案:

答案 0 :(得分:5)

试试这个:

alert(JSON.parse(localStorage['test'] || null));

失败的原因是JSON.parse(undefined_variable)出现“无效字符”错误。如果localStorage['test']不存在,则为undefined,因此会出错。如果值为falsy,则上面的代码将null置于原位undefined。但是,如果值为0""或其他假值,则会产生不良影响。如果需要更具体的代码,请尝试:

alert(JSON.parse(typeof localStorage['test'] == "undefined" ? null : localStorage['test']));

答案 1 :(得分:2)

使用localStorage时,您需要在编码中预测数据可能不在那里,您需要测试该条件并以某种方式处理它。最简单的方法是这样的:

var rawData = localStorage.getItem("something");
var parsedData = {};  // set whatever the default value should be if there is no localStorage value
if (rawData) {
    parsedData = JSON.parse(rawData);
}

您还可以使用异常处理:

var parsedData;
try {
    parsedData = JSON.parse(localStorage.getItem("something"));
} catch(e) {
    parsedData = {};    // set default value if localStorage parsing failed
}

此外,您应该学习如何在浏览器错误控制台或调试器控制台中查看您的javascript错误。 Javascript没有被“阻止”。它抛出了一个未处理的错误,因此执行被中止。错误控制台和调试器控制台中都记录了该错误(行号和错误类型),供您查看。