localStorage["something"] 与 localStorage.something

bla*_*ife 2 javascript local-storage

可能的重复:
JavaScript 属性访问:点符号与括号?

我是 chrome 扩展的新手。我知道 Java,但 Javascript 是完全不同的东西。

我想问一下localStorage["something"]和 和有localStorage.something什么不一样?

方括号与点。

aps*_*ers 5

没有区别。实际上,JavaScript 中的两种语法从整体上看并没有什么区别:

someObj.someProp === somObj["someProp"];
Run Code Online (Sandbox Code Playgroud)

唯一的区别是某些字符在字符串中有效,而在点属性名称中无效:

someObj["some-prop"] // valid
someObj.some-prop // this is actually the value of `someObj.some` minus the value of `prop`
Run Code Online (Sandbox Code Playgroud)

请注意,这两种存储值的localStorage方法也与使用.getItem.setItem方法相同。根据W3C 规范

每个 Storage 对象都提供对键/值对列表的访问,这些键/值对有时称为items

这些项目可以通过同名的对象属性访问和可变,或者通过使用.getItem和通过名称引用它们.setItem。唯一的区别是这些函数可以被覆盖以提供包装,例如,在存储之前对对象进行 JSON 化:

localStorage.setItem = function(key, val) {
    localStorage[key] = JSON.stringify(val);
}
Run Code Online (Sandbox Code Playgroud)

  • `someObj.someProp === somObj["someProp"];` 不为真,如果值为 `NaN`。特洛洛洛`:P` (5认同)
  • @ŠimeVidas 并且在使用 `var someObj={};Object.defineProperty(someObj,'someProp',{get:function(){return{};}});` 时都不是真的。不过,`NaN` 比这更可能发生;) (3认同)