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
@Mark
localStorage.testObject | null
返回此表达式中的第一个真实值或
null
,因此,如果
localStorage.testObject
生成
undefined
,您将得到
null
,当您像您应该的那样访问localStorage时,它会被返回:通过
getItem()
@Christoph关于使用
getItem()
你为什么说“喜欢你应该这样做”。另一种是错误的还是在某些方面较差?@标记getter和setter提供了一种一致的、标准化的和交叉浏览器兼容的方式来使用LS-api,并且应该始终优先于其他方式。