繁体   English   中英

是否保证 JavaScript 数组顺序?

[英]Is a JavaScript array order guaranteed?

假设一个 JavaScript 数组以一种形式发布(使用 ajax/JQuery)是否保证数组中的顺序?

来自@Quentin 的有效问题“定义‘以表格形式发布’”

$.ajax({
  type: "POST",
  url: url,
  data: { foo: [{ name: "one" }, { name: "two" }] },
  success: success,
  dataType: dataType
});

扩展问题(由于上述原因),数组是否保证在服务器端保留顺序?

如有疑问,您可以随时参考 ECMAScript 标准: Array Exotic Objects

数组是语言中的一种特殊对象,它具有关于如何处理长度属性的附加语义,这些属性是从 0 到 2^32 的整数属性。 在 javascript 中,如果在 0 到排除的长度属性范围内缺少值,则数组可能是稀疏的。 各种数组方法都考虑到了这一点,例如forEach忽略缺失值

什么是缺失值?

该语言试图让数组尽可能地对普通对象起作用:您可以向其添加任何属性,甚至可以拥有从数组继承的对象。

var fruits = ["Apple", "Banana"];
fruits.preferred = "Apple";

这种代码不会造成任何问题,但是如果您开始编写:

fruits[100] = "Strawberry";
for(let i = 0; i < fruits.length; ++i) {
...
}

100 是 [0, 2^32) 范围内的属性名称,数组元素也是,但此时fruits.length应该是什么? 它必须是 101,否则 for 循环永远不会得到“草莓”。

但是此时您必须接受有一个从未定义过的元素 [2, 99] 范围:这些是缺失值。

反之亦然,修改长度属性时也必须如此

var fruits = ["Apple", "Banana"];
fruits.length = 0;

现在 for 循环将永远不会获取数组的任何元素:这相当于清空 Fruits 数组。

也可以增加长度,结果是缺失值

所以是的数组是有序的,因为您可以按递增顺序迭代其所有元素,但请记住,可能存在缺失值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM