【问题标题】:localStorage["something"] vs localStorage.something [duplicate]localStorage["something"] vs localStorage.something [重复]
【发布时间】:2018-04-18 05:18:52
【问题描述】:

可能重复:
JavaScript property access: dot notation vs. brackets?

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

我想问一下localStorage["something"]localStorage.something有什么区别?

方括号与点。

【问题讨论】:

    标签: javascript local-storage


    【解决方案1】:

    没有区别。其实这两种语法在 JavaScript 整体上并没有什么区别:

    someObj.someProp === somObj["someProp"];
    

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

    someObj["some-prop"] // valid
    someObj.some-prop // this is actually the value of `someObj.some` minus the value of `prop`
    

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

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

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

    localStorage.setItem = function(key, val) {
        localStorage[key] = JSON.stringify(val);
    }
    

    【讨论】:

    • someObj.someProp === somObj["someProp"]; 不正确,如果值为 NaN。特洛洛洛洛:P
    • @ŠimeVidas 使用var someObj={};Object.defineProperty(someObj,'someProp',{get:function(){return{};}}); 时两者都不成立。不过,NaN 比这个更可能发生;)
    • @ŠimeVidas 虽然我们完全准确,但localStorage 上的点和括号表示法与set/getItem 略有不同:属性访问不能持久地将值存储在共享localStorage 上的本机属性名称,而函数访问可以。 localStorage.setItem = "foo" 行不会导致持久存储,而localStorage.setItem("setItem", "foo") 会。 :P
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2015-04-11
    • 2015-07-09
    • 1970-01-01
    • 2014-05-01
    • 2020-08-07
    • 2013-03-14
    • 2014-06-30
    相关资源
    最近更新 更多