Javascript array.sort с undefined значениями
Как Array.prototype.sort
обрабатывать значения undefined в массиве?
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
никогда не передаются как l
или r
.
Могу ли я гарантировать, что все значения undefined всегда будут идти до конца массива для всех браузеров?
Будет ли следующий цикл обрабатывать все данные не undefined
в массиве
array.sort();
for (var i = 0; array[i] !== undefined; i++) {
// handle array
}
Вы можете предположить, что никто не объявлял undefined
в качестве переменной.
Ответы
Ответ 1
Да, вы можете смело предположить, что undefined
будет перемещен в конец массива.
От MDC:
В JavaScript 1.2 этот метод больше не преобразует элементы undefined в null; вместо этого он сортирует их к верхнему концу массива
Из spec, 15.4.4.11:
Поскольку значения несуществующих свойств всегда сравниваются с значениями свойств undefined и undefined всегда сравнивается больше любого другого значения, значения свойств undefined всегда сортируются до конца результата, за которыми следуют несуществующие значения свойств.
Ответ 2
Похоже, что значения undefined попадут в нижнюю часть списка. Вот несколько примеров кода, чтобы показать вам, что происходит:
var a = [1,undefined,2,undefined,3,undefined,4];
a = a.sort();
for( i = 0 ; i < a.length ; i++ )
{
alert( a[i] );
}
Это, конечно же, поведение JavaScript по умолчанию. Если вы перезапишите поведение по умолчанию, тогда вы узнаете только.
Ответ 3
все значения undefined будут идти до конца массива независимо от их порядка в объявлении. (по крайней мере, так оно работает в процессоре chrome js)
Ответ 4
Safari просто удаляет свойство undefined
при вызове метода sort();