很明显,我不能依赖JSON中键值对的排序。例如,JSON解析器可以解释
{
"someKey" : "someValue",
"anotherKey" : "anotherValue",
"evenAnotherKey" : "evenAnotherValue"
}
作为
{
"anotherKey" : "anotherValue",
"someKey" : "someValue",
"evenAnotherKey" : "evenAnotherValue"
}
合法,但我可以依赖JSON 数组的排序吗?例如,JSON解析器是否可以解释
{
"arrayKey" : ["firstElement", "secondElement", "thirdElement"]
}
作为
{
"arrayKey" : ["secondElement", "firstElement1", "thirdElement"]
}
合法?我不会,但我的朋友告诉我,我不对。
答案 0 :(得分:5)
是的,你可以!制作阵列,以便顺序重要!这就是将对象与数组分开的原因。特别是在JS和JSON中。
答案 1 :(得分:3)
总是订购数组和列表。这就是拥有数组和列表的重点 - 他们的位置 是他们的索引。
顺便说一下,由于ES5对象的顺序(你称之为键值对)也是有保证的。但不是直截了当的。
对于对象,任何数字键都将在非数字键之前排序,并以数字方式排序。但所有其他密钥都保证按插入顺序排列。所以以下对象:
{
hello : "world",
foo : "bar",
"22" : "first"
}
必须以:
返回{
"22" : "first",
hello : "world",
foo : "bar"
}
目前所有浏览器都支持此功能,而node.js支持此功能,但并非所有javascript交叉编译器(如Babel)都支持此功能。
就我个人而言,我不喜欢像对象一样对待像对象这样的无序数据结构。但看起来js社区不同意。例如,故意随意地对地图的顺序进行随机化,以防止人们依赖于语言实现中的任何意外稳定排序。