带有未定义值的javascript array.sort

Ray*_*nos 12 javascript sorting cross-browser

如何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;
Run Code Online (Sandbox Code Playgroud)

调用时array.sort(function(l,r) { ... });,值undefined永远不会作为l或传入r.

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

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

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

您可以假设没有人声明undefined为变量.

Mat*_*att 11

是的,你可以放心地假设undefined将被移动到数组的末尾.

来自MDC:

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

规范,15.4.4.11 :

由于不存在的属性值总是比未定义的属性值大,并且undefined始终比任何其他值更大,因此未定义的属性值始终排序到结果的末尾,后跟不存在的属性值.