. 访问 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"(小写)。
结果是,不能使用带有起始编号的点表示法中的变量或属性。