Javascript 为什么这个json示例将对象解析为数组
我有以下JSON代码:Javascript 为什么这个json示例将对象解析为数组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我有以下JSON代码: { "query": { "pages": { "-1": { "ns": 0, "title": "StackOverflow", } } } } 我将其解析为一个JSON对象: data = JSON.parse(jsonString); 为什么要访问对象-1我必须执行数据.query.pages[-1]而
{
"query": {
"pages": {
"-1": {
"ns": 0,
"title": "StackOverflow",
}
}
}
}
我将其解析为一个JSON对象:
data = JSON.parse(jsonString);
为什么要访问对象
-1
我必须执行数据.query.pages[-1]
而不是数据.query.pages.-1。在本例中,pages不是数组而是对象。它不是数组,而是对象。object[“name”]
和object.name
都是访问给定对象上名为name
的属性的相同方法
您不能使用对象-1
访问对象属性,因为这是一个语法错误,与您不能使用对象+1
或对象的方式相同。[1
或对象。/1
它们都是对象属性的有效名称,但在使用对象.propertyName
语法时,它们在语法上无效
另一个警告是,属性名不能是整数。设置或获取
对象[-1]
与对象[“-1”相同
将属性名称转换为字符串。如果语法有效,则与访问对象相同。您不能执行数据.query.pages.-1
,原因与您不能执行var-1;
相同:-1
不是有效标识符
但这不是问题
foo.bar // Access member bar of object foo
这只是一条捷径
foo["bar"] // Access member bar of object foo
所以你可以
data.query.pages["-1"]
你甚至可以
data["query"]["pages"]["-1"]
括号表示法与数组无关,它只是访问属性的另一种方式。事实上,我们只能对数组使用括号表示法的原因在于计算规则:要使用点表示法,属性名称必须是有效的
或者简单地说:
如果属性名是有效变量名或保留字,则只能使用点表示法
而且-1
不属于这一类(例如,你不能做var-1='foo';
)
无效标识符名称的示例:
0foo
,-foo
,和bar
任何不以字母开头的内容,\uuu
或$
foo-bar
,foo+bar
,foo-bar
任何包含非字母、数字、\uu
或$
的内容(或属于特定unicode范围,请参见规范)
但是,使用保留字是可能的,即使它们不能用作变量:
foo.if // valid
var if = 42; // invalid
,虽然我想它没有提到任何数字