8 авг. 2011 г.

Javascript Fuckup

Есть у меня репозиторий номеров журналов на CouchDB по ней есть map-reduce -> post-process (list function), который вываливают понятный клиентской программе JSON со списком номеров; номера имеют дату выхода в формате dd.mm.yyyy (дата храниться как строка). В старой версии номера сортировались на сервере. Дата на чиселки билась примерно так:

date.split('.').map(function(x) { return parseInt(x) })

Теперь попробуйте эту строчку повбивать, например, в консоли Chrome/Safari/etc:

вначале на01.10.2011
потом на02.10.2011
и так до07.10.2011
а потом08.10.2011

И получаем совершенно внезапно НЕ ТО. Тоже самое с 09; с 10 всё уже ок, как и с 8 и 9.

Сегодня (08.08.2011) вышел новый номер и неправильно отсортировался. А теперь, кто не знает, может погуглить как работает parseInt

Кстати говоря, следующий код работает полностью корректно, что наталкивает на ответ

date.split('.').map(function(x) { return parseInt(x, 10) })

Типичный пример лютого нарушения принципа "наименьшего удивления". Собственно весь Javascript - пример нарушения этого принципа. За такоё по-моему надо убивать.