【问题标题】:Why I can't access JSON dictionary element using dot notation? [duplicate]为什么我不能使用点符号访问 JSON 字典元素? [复制]
【发布时间】:2016-04-09 20:26:43
【问题描述】:

我有以下 JSON 表示:

var collectionCopy = JSON.parse(JSON.stringify(
 {
   1 : {
        2: "2"
   }  
}
));

为什么我不能使用点符号(即collectionCopy.1.2)访问键“2”?

【问题讨论】:

  • 这只是一个对象,现在你已经解析了它。使用collectionCopy['1']['2']
  • 你需要使用 collectionCopy['1']['2'] 它不知道你的意思是字符串而不是实际数字
  • 要作为 collectionCopy.1 访问,属性 1 不是有效的 JavaScript 标识符。您只能使用点表示法作为有效 JavaScript 标识符的属性。
  • 你知道JSON.parse(JSON.stringify(什么都不做,对吧?

标签: javascript json


【解决方案1】:

您只能在语言中的有效标识符上使用点符号来访问对象的属性。

由于数字(或以数字开头的任何内容)不是有效的标识符,您只能使用括号表示法访问它(作为对象的属性)。

【讨论】:

    【解决方案2】:

    这是因为键是字符串而不是实际数字:

    访问它使用:

    collectionCopy[1][2]
    

    collectionCopy['1']['2']
    

    Relevant docs on accessing properties

    【讨论】:

    • 但是当我有一个常规对象var newObject = {1:{2:"2"}}; 时,我可以使用点符号newObject.1.2。这是因为我有.stringify()吗?还是 JSON 将每个键和键的值都转换为字符串?谢谢你的文档,我读了。
    • 你能告诉我它在哪里工作吗?我刚刚尝试过,但无法正常工作:jsbin.com/tevebi/1/edit?js,console
    • 我认为它应该可以工作 :D 我想我只是弄乱了简单的语法。 newObject.1.2 不起作用,也不应该。但如果我有这样的对象 var newObject = {one:{two:"2"}} console.log(newObject.one.two) 打印 "2" 到控制台。
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2017-02-28
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多