javascript array.sort具有未定义的值

Array.prototype.sort如何处理数组中的未定义值?

var array = [1,undefined,2,undefined,3,undefined,4];
var array2 = [];
array2[0] = 1;array2[2] = 2;array2[4] = 3;array2[6] = 4;

当调用array.sort(function(l,r) { ... }); undefined的值永远不会以lr传入。

我能保证所有未定义的值总是会到达所有浏览器的数组末尾吗?

以下循环会处理数组中的所有非undefined数据吗?

array.sort();
for (var i = 0; array[i] !== undefined; i++) {
    // handle array
}

你可能会认为没有人宣布undefined为变量。


是的,您可以放心地假定undefined将移动到数组的末尾。

来自MDC:

在JavaScript 1.2中,此方法不再将未定义的元素转换为null; 而是将它们排序到数组的高端

从规范中,15.4.4.11:

由于不存在的属性值总是比未定义的属性值大,而且未定义的值总是比任何其他值大,所以未定义的属性值总是排序到结果的末尾,接着是不存在的属性值。


所有未定义的值都将在数组的末尾,而不管它们在声明中的顺序如何。 (至少这是它在Chrome的js引擎中的工作原理)


看起来,未定义的值将落入列表的底部。 以下是一些示例代码,向您展示发生了什么:

var a = [1,undefined,2,undefined,3,undefined,4];
  a = a.sort();
  for( i = 0 ; i < a.length ; i++ )
  {
    alert( a[i] );
  }

这当然是JavaScript的默认行为。 如果您覆盖默认行为,那么只有您会知道。

链接地址: http://www.djcxy.com/p/50269.html

上一篇: javascript array.sort with undefined values

下一篇: Oracle SQL: Detecting breaks in continual spans