Вы читаете английскую версию этой статьи, так как пока нет перевода на данный язык. Помогите нам перевести эту статью!
Аннотация
Функция isNaN()
определяет является ли литерал или переменная нечисловым значением (NaN
) или нет. При работе с функцией необходимо проявлять осторожность так как она имеет свои особенности. В качестве альтернативы можно использовать метод Number.isNaN()
из ECMAScript 6, или дополнительно проверять литерал или переменную на нечисловое значение при помощи typeof
.
Синтаксис
isNaN(значение)
Параметры
Значение
- Литерал или переменная которые будут проверяться на нечисловое значение.
Описание
Для чего нужна функция isNaN
?
В отличие от других возможных значениях в JavaScript, при работе с значением данного типа невозможно полагаться на == и === для определения, является ли переменная или литерал нечисловым значением (NaN
) или нет, так как проверки NaN == NaN
и NaN === NaN
в качестве значения вернут false
. Следовательно, для проверки нужна функция isNaN
.
Примечание:
Для альтернативной проверки переменной на NaN без использования функции isNaN() можно воспользоваться конструкцией x !== x
var x = NaN
x != x // true
x !== x // true
Генерация значения NaN
Значение NaN
генерируются арифметическими операциями, результатом которых является undefined или unrepresentable. Такие условия не обязательно обозначают переполнение стека. NaN
также может являться результатом попытки преобразования числа в строку, или значения, не имеющего эквивалента в простых числовых примитивах.
Например, деление нуля на нуль возвращает NaN
— но деление других чисел на 0 не возвращает NaN.
var x = NaN
x != x // true
x !== x // true
Особенности поведения
С самых ранних версий функции isNaN
её поведение для не числовых переменных или литералов было довольно-таки запутанным. Когда аргументом функции isNaN
является переменная, тип которой не Number, она преобразуется к типу Number
. Полученное значение затем проверяется, является ли оно NaN
. Таким образом для не числовых значений, которые можно преобразовать в числовой тип без не-NaN значения (в частности, пустая строка или логические примитивы, которые преобразуются в 0 или 1), возвращаемое значение "false" может быть полной неожиданностью; пустая строка преобразуется в "not a number." Путаница связана с тем, что "not a number" имеет определённое значение, описанное в стандарте IEEE-794 чисел с плавающей точкой. Функцию стоит воспринимать в качестве ответа на вопрос, "Является ли это значение корректным числом по стандарту IEEE-794?"
В следующей версии ECMAScript (ES6) функция Number.isNaN()
также присутствует. Number.isNaN(x)
будет надёжным методом для проверки, содержит ли x
значение NaN
или нет. Даже с Number.isNaN
, однако, результатом NaN
остаётся точное числовое значение, а не просто "not a number".
Пример
isNaN(NaN); // true isNaN(undefined); // true isNaN({}); // true isNaN(true); // false isNaN(null); // false isNaN(37); // false // strings isNaN("37"); // false: "37" преобразуется в число 37 которое не NaN isNaN("37.37"); // false: "37.37" преобразуется в число 37.37 которое не NaN isNaN(""); // false: пустая строка преобразуется в 0 которое не NaN isNaN(" "); // false: строка с пробелом преобразуется в 0 которое не NaN isNaN("37,5"); // true // Даты isNaN(new Date()); // false isNaN(new Date().toString()); // true // Пример почему использование isNaN не всегда уместно isNaN("blabla") // true: "blabla" преобразованно в число. // При парсинге преобразуется в число при неудаче возвращает NaN
Спецификация
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 1st Edition. | Standard | Initial definition. |
ECMAScript 5.1 (ECMA-262) Определение 'isNaN' в этой спецификации. |
Стандарт | |
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'isNaN' в этой спецификации. |
Стандарт |
Поддержка браузерами
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Компьютеры | Мобильные | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
isNaN | Chrome Полная поддержка 1 | Edge Полная поддержка 12 | Firefox Полная поддержка 1 | IE Полная поддержка 3 | Opera Полная поддержка Да | Safari Полная поддержка Да | WebView Android Полная поддержка 1 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 4 | Opera Android Полная поддержка Да | Safari iOS Полная поддержка Да | Samsung Internet Android Полная поддержка 1.0 | nodejs Полная поддержка Да |
Легенда
- Полная поддержка
- Полная поддержка