是否保证JavaScript数组顺序?

Dem*_*tic 37 javascript arrays post

假设在表单中发布了一个JavaScript数组(使用ajax/JQuery),是否保证了数组中的顺序?

来自@Quentin的有效问题"定义"以表格形式发布'"

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

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

Nic*_*oca 37

遇到疑问时,您总是可以参考ECMAScript标准:Array Exotic Objects

Array是一种特殊类型的对象,在语言中具有关于如何处理length属性的附加语义,相对于从0到2 ^ 32的整数属性.在javascript中,如果缺少0到length属性的缺失值,则数组可以是稀疏的.各种数组方法都考虑到这一点,例如forEach忽略缺失值

什么是缺失值?

该语言尝试使数组尽可能地对正常对象起作用:您可以向其添加任何属性,甚至包含从数组继承的对象.

var fruits = ["Apple", "Banana"];
fruits.preferred = "Apple";
Run Code Online (Sandbox Code Playgroud)

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

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

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

但是在这一点上你必须接受从未定义的一系列元素[2,99]:这些是缺失的值.

反之亦然,修改length属性时必须如此

var fruits = ["Apple", "Banana"];
fruits.length = 0;
Run Code Online (Sandbox Code Playgroud)

现在for循环永远不会得到数组的任何元素:这相当于清空fruits数组.

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

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

  • 你能扩展"缺失价值观"吗? (2认同)
  • `forEach` 是否按升序迭代? (2认同)