2016-06-08 2 views
3

Я хочу, чтобы отсортировать массив, содержащий неопределенные/утратившим число, так что неопределенные/нулевые значения всегда приходят первым:[] .sort игнорирует неопределенные значения?

function sorter(a, b) { 
    if (a == b) return 0; 
    if (a == undefined) return -1; 
    if (b == undefined) return 1; 
    return a - b; 
} 

Однако, когда массив содержит неопределенное значение оно становится последним элементом

[-1, 0, 1, undefined, 2, 3].sort(sorter);  // [-1, 0, 1, 2, 3, undefined] 

в то время как он получает правильно отсортирован, если значение равно нулю

[-1, 0, 1, null, 2, 3].sort(sorter);   // [null, -1, 0, 1, 2, 3] 

Что я делаю неправильно? Разве это не должно привести к точному порядку, так как null == undefined?

+0

Это не одно и то же ... Ответ от mar10 очищает его - http://stackoverflow.com/questions/2559318/how-to-check-for-an-undefined-or-null-variable-in- Javascript – RicardoVallejo

ответ

1

Если добавить console.log(a, b) к вашей sorter функции, вы увидите, что значение undefined никогда не передается в функцию sorter. Я думаю, что интерпретатор считает, что это «пробел» в массиве и, следовательно, не считает его ценным.

И, кстати, null == undefined является true, но null === undefined является ложным, это не одно и то же.

Смежные вопросы