使用 键名访问 JSON 对象时出现问题.但适用于 []


使用

. 访问 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);

如果使用点表示法:

属性必须是有效的 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

在点表示法中使用时,对象属性必须以字母开头。这只是Javascript中的一个规则。你可以从字面上命名属性'*&^'但你必须通过[]符号来命名。

2G以数字开头,因此需要[]表示法。

从文档到点表示法的属性访问器:

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

和变量

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

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

最新更新