Текущий язык Spec: технически, порядок не указан.
Текущие браузеры: порядок сохраняется с большим исключением таких ключей, как «7», которые анализируются как целые числа и обрабатываются по-разному с помощью Chrome / V8.
Спецификация будущего языка (> ES2015): Как правило, вы можете ожидать, что упорядоченные сегодня вещи не будут неупорядочены. Новые API гарантируют заказ; существующие API трудно изменить. См. Ответ JMM для более подробной информации.
Лучшая ссылка ниже приведена в комментарии Tim Down:
http://code.google.com/p/v8/issues/ detail? id = 164
Эта ошибка подробно описывает проектные решения, связанные с реализацией ключевых заказов Chrome. Один вывод - это то, что для строковых ключей, которые не анализируют целое число (то есть «a» или «b», но не «3»), клавиши печатаются в порядке ввода во всех основных браузерах, и хотя это поведение не является «стандартизировано», оно IS считается существенной проблемой обратной совместимости поставщиками браузеров. Используйте на свой страх и риск.
По одному из (довольно упрямых) комментариев:
Стандарты всегда следуют за реализациями, вот откуда появился XHR, и Google делает то же самое путем внедрения Gears и последующего использования эквивалентной функциональности HTML5. Правильное решение состоит в том, чтобы ECMA формально включала де-факто стандартное поведение в следующий оборот спецификации.
blockquote>Если вы полагаетесь на порядок вставки, вы находитесь за пределами спецификации ECMAScript, но внутри де-факто стандарт общего поведения браузера , если ваши ключи не анализируются как целые числа .
Вернуть
Истина
, если x является NaN (не числом), иЛожь
в противном случае.
>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True
или сравните число с собой. NaN всегда! = NaN, в противном случае (например, если является числом) сравнение должно быть успешным.
Обычный способ проверить NaN - проверить, равно ли оно самому себе:
def isNaN(num):
return num != num
Другой метод, если вы застряли на <2.6, у вас нет Numpy, а у вас нет поддержки IEEE 754:
def isNaN(x):
return str(x) == str(1e400*0)
С python < 2.6 я закончил с
def isNaN(x):
return str(float(x)).lower() == 'nan'
Это работает для меня с python 2.5.1 на Solaris 5.9 box и с python 2.6.5 на Ubuntu 10