使用键名访问JSON对象的问题。但适用于[]

时间:2016-06-13 07:20:32

标签: javascript arrays json object key

使用时访问JSON对象的原因是什么。给出错误,但使用[]它有效吗?访问JSON对象键的正确语法是什么?

此语法提供错误:

  

var obj2G = obj.2G;

这种语法有效,但为什么需要以这种方式访问​​?

  

var obj2G = obj [“2G”];

var obj = {
  "2G": [{
    "essid": "SINGTEL-662F",
    "authmode": "psk psk2",
    "authkey": "0000026159",
    "isEnable": "1",
    "isHidden": "0",
    "hwaddr": "E0:8E:3C:00:66:30",
    "opmode": "ap"
  }, {
    "essid": "GUEST1-662F",
    "authmode": "psk psk2",
    "authkey": "aabbccddee",
    "isEnable": "0",
    "isHidden": "0",
    "hwaddr": "",
    "opmode": "ap"
  }, {
    "essid": "GUEST2-662F",
    "authmode": "psk psk2",
    "authkey": "aabbccddee",
    "isEnable": "0",
    "isHidden": "0",
    "hwaddr": "",
    "opmode": "ap"
  }, {
    "essid": "GUEST3-662F",
    "authmode": "psk psk2",
    "authkey": "aabbccddee",
    "isEnable": "0",
    "isHidden": "0",
    "hwaddr": "62:8E:3C:00:66:33",
    "opmode": "ap"
  }],
  "5G": [{
    "essid": "SINGTEL-662F(5G)",
    "authmode": "psk psk2",
    "authkey": "0000026159",
    "isEnable": "1",
    "isHidden": "0",
    "hwaddr": "E0:8E:3C:00:66:31",
    "opmode": "ap"
  }, {
    "essid": "GUEST1(5G)-662F",
    "authmode": "psk psk2",
    "authkey": "aabbccddee",
    "isEnable": "0",
    "isHidden": "0",
    "hwaddr": "6a:8e:3c:00:66:32",
    "opmode": "ap"
  }, {
    "essid": "GUEST2(5G)-662F",
    "authmode": "psk psk2",
    "authkey": "aabbccddee",
    "isEnable": "0",
    "isHidden": "0",
    "hwaddr": "",
    "opmode": "ap"
  }, {
    "essid": "GUEST3(5G)-662F",
    "authmode": "psk psk2",
    "authkey": "aabbccddee",
    "isEnable": "0",
    "isHidden": "0",
    "hwaddr": "6a:8e:3c:00:66:30",
    "opmode": "ap"
  }]
}

obj2G = obj["2G"];
console.log(obj2G);

obj2G = obj.2G;
console.log(obj2G);

3 个答案:

答案 0 :(得分:2)

在点表示法中使用时,对象属性必须以字母开头。这只是Javascript中的规则。您可以按字面'*&^'命名属性,但必须通过[]表示法进行命名。

2G以数字开头,因此需要[]符号。

答案 1 :(得分:2)

如果使用点符号:

  

属性必须是有效的JavaScript标识符,即一系列字母数字字符,也包括下划线(“_”)和美元符号(“$”),它们不能以数字开头。例如,object。$ 1有效,而object.1不是。

在这种情况下,您必须使用括号表示法:

  

property_name是一个字符串。该字符串不必是有效的标识符;它可以有任何价值,例如“1foo”,“!bar!”,甚至是“”(空格)。

请参阅文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors

值得一提的是,如果要使用变量访问属性,则必须使用括号表示法。例如:

var myName = "foo";
var myObject = { foo: 42};
console.log(myObject.myName);//returns undefined

可是:

var myName = "foo";
var myObject = { foo: 42};
console.log(myObject[myName]);//returns 42

答案 2 :(得分:1)

从文档到Property Accessor的点符号:

  

在此代码中,属性必须是有效的JavaScript标识符,即一系列字母数字字符,也包括下划线(“_”)和美元符号(“$”),它们不能以数字开头。例如,object。$ 1有效,而object.1不是。

Variable

  

JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,因此字母包括字符“A”到“Z”(大写)和字符“a”到“z”(小写)。

结果是,不能使用带有起始编号的点符号的变量或属性。