Javascript 带有点/括号表示法的LocalStorage获取项不适用于JSON.parse()
如果可能,我希望能够使用速记符号从Javascript 带有点/括号表示法的LocalStorage获取项不适用于JSON.parse(),javascript,json,local-storage,stringify,Javascript,Json,Local Storage,Stringify,如果可能,我希望能够使用速记符号从localStorage获取项目,然后在其上使用JSON.parse()。 //var retrievedObject = JSON.parse(localStorage.getItem('testObject')); //works var retrievedObject = JSON.parse(localStorage.testObject); //doesn't work //var retrievedObject = JSON.parse(localS
localStorage
获取项目,然后在其上使用JSON.parse()
。
//var retrievedObject = JSON.parse(localStorage.getItem('testObject')); //works
var retrievedObject = JSON.parse(localStorage.testObject); //doesn't work
//var retrievedObject = JSON.parse(localStorage['testObject']); //doesn't work
if (retrievedObject == null) {
var testObject = { 'one': 1, 'two': 2, 'three': 3 };
// Put the object into storage
localStorage.testObject = JSON.stringify(testObject);
}
else {
retrievedObject.four = 4;
// Put the object into storage
localStorage.testObject = JSON.stringify(retrievedObject);
}
// Retrieve the object from storage
var retrievedObject = JSON.parse(localStorage.getItem('testObject'));
console.log('retrievedObject: ', retrievedObject);
在我下面的代码中,如果我使用以下选项,它将起作用:
var retrievedObject = JSON.parse(localStorage.getItem('testObject')); //works
但是,如果我使用以下两个速记选项之一,则无法使用:
var retrievedObject = JSON.parse(localStorage.testObject); //doesn't work
var retrievedObject = JSON.parse(localStorage['testObject']); //doesn't work
我所有的代码都在下面和JSFIDLE:上。
//var retrievedObject = JSON.parse(localStorage.getItem('testObject')); //works
var retrievedObject = JSON.parse(localStorage.testObject); //doesn't work
//var retrievedObject = JSON.parse(localStorage['testObject']); //doesn't work
if (retrievedObject == null) {
var testObject = { 'one': 1, 'two': 2, 'three': 3 };
// Put the object into storage
localStorage.testObject = JSON.stringify(testObject);
}
else {
retrievedObject.four = 4;
// Put the object into storage
localStorage.testObject = JSON.stringify(retrievedObject);
}
// Retrieve the object from storage
var retrievedObject = JSON.parse(localStorage.getItem('testObject'));
console.log('retrievedObject: ', retrievedObject);
问题第一次出现时,
localStorage.testObject
尚未定义
在这种情况下,localStorage.testObject
是未定义的,JSON.parse
因该参数而失败
另一方面,getItem
方法在内部处理这个问题,并返回null
您可以使用
JSON.parse(localStorage.testObject | | null)
在这里对我很好:第一次运行:retrievedObject:Object-one:1-3:3-2:2
第二次运行:four:4-one:1-3:3-2:2也对我来说。。。我还确保将底部的检索行编辑为['testObject']
和。我已使用更新的JSFIDLE链接更新了该问题:。谢谢!这管用!正如我所理解的……最后一个选项说明如果localStorage.testObject
不存在,那么运行JSON.parse(null)
,它返回null
?@标记yes|
是逻辑的或,我们将其用作。因此,如果localStorage.testObject
是undefined
,则它将使用null
@MarklocalStorage.testObject | null
返回此表达式中的第一个真实值或null
,因此,如果localStorage.testObject
生成undefined
,您将得到null
,当您像您应该的那样访问localStorage时,它会被返回:通过getItem()
@Christoph关于使用getItem()
你为什么说“喜欢你应该这样做”。另一种是错误的还是在某些方面较差?@标记getter和setter提供了一种一致的、标准化的和交叉浏览器兼容的方式来使用LS-api,并且应该始终优先于其他方式。