[].sort 忽略未定义的值?

sub*_*nid 5 javascript arrays sorting

我想对包含 undefined/null 和数字的数组进行排序,以便 undefined/null 值始终排在第一位:

function sorter(a, b) {
    if (a == b) return 0;
    if (a == undefined) return -1;
    if (b == undefined) return  1;
    return a - b;
}
Run Code Online (Sandbox Code Playgroud)

但是,当数组包含未定义的值时,它将成为最后一个元素

[-1, 0, 1, undefined, 2, 3].sort(sorter);     // [-1, 0, 1, 2, 3, undefined]
Run Code Online (Sandbox Code Playgroud)

如果值为空,它会正确排序

[-1, 0, 1, null, 2, 3].sort(sorter);          // [null, -1, 0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?由于 null == undefined,这不应该导致完全相同的顺序吗?

Gil*_*tzi 1

如果添加console.log(a, b)到函数中sorter,您会发现该undefined值永远不会传递到sorter函数中。我认为解释器认为它是数组中的“间隙”,因此并没有真正将其视为一个值。

顺便说一句,null == undefinedis true,但null === undefinedis false,它们不是同一件事。