use*_*899 223 javascript arrays json list
我注意到JSON对象中元素的顺序不是原始顺序.
那些JSON列表的元素呢?他们的订单是否保持?
小智 329
是的,保留了JSON数组中元素的顺序.来自RFC 7159 -JavaScript Object Notation(JSON)数据交换格式 (强调我的):
对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,空值,对象或数组.
数组是零个或多个值的有序序列.
术语"对象"和"数组"来自JavaScript的约定.
Hot*_*cks 60
[]维护array()中元素的顺序."对象"({})中元素(名称:值对)的顺序不是,并且它们通常是"混乱",如果不是由JSON格式化程序/解析器本身然后由特定于语言的对象(字典, NSDictionary,Hashtable等)用作内部表示.
小智 6
实际上,如果密钥是NaN类型,浏览器将不会更改顺序.
以下脚本将输出"One","Two","Three":
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
    alert(foo[bar]);
}
以下脚本将输出"Three","One","Two":
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
    alert(foo[bar]);
}
一些JavaScript引擎将密钥保持在插入顺序中.例如,V8 将所有键保持为插入顺序,除了可以解析为无符号32位整数的键.
这意味着如果您运行以下任一项:
var animals = {};
animals['dog'] = true;
animals['bear'] = true;
animals['monkey'] = true;
for (var animal in animals) {
  if (animals.hasOwnProperty(animal)) {
    $('<li>').text(animal).appendTo('#animals');
  }
}
var animals = JSON.parse('{ "dog": true, "bear": true, "monkey": true }');
for (var animal in animals) {
  $('<li>').text(animal).appendTo('#animals');
}
在使用V8的Chrome上,您将始终按顺序获得狗,熊和猴子.Node.js也使用V8.即使你有数以千计的物品,这也是正确的.YMMV与其他JavaScript引擎.