[英]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.