- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
var list = [ ];
// hidden elements
list[ NaN ] = 'this-element-always-is-last'; // max index
list[ Number.MAX_VALUE ] = 'this-is-smallest';
list[ Infinity ] = 'this-just-infinity';
// list.length == 0; // true
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+161
var list = [ ];
// hidden elements
list[ NaN ] = 'this-element-always-is-last'; // max index
list[ Number.MAX_VALUE ] = 'this-is-smallest';
list[ Infinity ] = 'this-just-infinity';
// list.length == 0; // true
Делать нечего в селе, мы сидим навеселе. Всех с пятницей!
Попытка раздуть массив и убить память?
P.S. На всякий: комменты к коду чушня.
Брат жив. Может быть, это и не массив вовсе получился?
P.S. Подобное возникает у меня, когда наивно беру случайный элемент массива
Когда мы пытаемся присвоить какое-то значение по ключу, который не переводится в целые, то ключ автоматически переводится в строку, и значение хранится в первой таблице. Поэтому, например, foo["1"] === foo[1].
И таки да: list[ NaN ] === list[ "NaN" ]
А этот тест мне нужен был чтобы однозначно впихнуть в массив элемент ключ которого всегда будет больше всех остальных возможных ключей в этом массиве, поэтому сразу вспомнилось Infinity, ну и так далее...
P.S. Надо поискать цитату из спеки, где описаны гарантии порядка...
...
For each own property key P of O that is an integer index, in ascending numeric index order
Add P as the last element of keys.
For each own property key P of O that is a String but is not an integer index, in property creation order
Add P as the last element of keys.
...
Опера 12:
for...in... перечисляет числовые ключи, list[NaN], list[Number.MAX_VALUE], list[Infinity].
Array.forEach перечисляет только числовые ключи.
IE9:
for...in... в том же порядке.
Array.forEach отсутствует.
Netscape Navigator 9:
for...in... перечисляет в порядке добавления. Да, числовые и нечисловые вперемешку, числовые не сортируются.
Array.forEach — только числовые по возрастанию индекса.
Konqueror — как в Опере.
Хром — как в Опере.
Firefox: до версии 5 (включительно) — как в Нетскейпе, после версии 29 (включительно) — как в Опере. Точное значение номера версии, на котором произошёл переход, лень искать.
Учитывая, что до сих пор встречаются ценители Fx 3.x, можно поржать.
The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.
P.S. Не лень было ставить столько фаерфоксов? Тут даже делением пополам затрахаешься...
Я прочитал, что версия 18.0 использует принципиально® новый™ движок IonMonkey, но на 18.0 оказалось всё по-старому. Ближайший выпуск ESR — 24.0, на нём всё оказалось по-новому. А дальше двоичный поиск на интервале (18.0; 24.0).