Что такое nan js
Перейти к содержимому

Что такое nan js

  • автор:

Что такое nan js

Глобальное свойство NaN является значением, представляющим не-число (Not-A-Number).

Атрибуты свойства NaN
Записываемое нет
Перечисляемое нет
Настраиваемое нет

Интерактивный пример

Описание

NaN является свойством глобального объекта.

Начальным значением NaN является Not-A-Number (не-число) — то же самое значение, что и у Number.NaN . В современных браузерах NaN является ненастраиваемым и незаписываемым свойством. Даже когда это не так, избегайте его переопределения.

В программах NaN используется довольно редко. Это возвращаемое значение в ситуациях, когда математические ( Math ) функции не срабатывают должным образом (например, при вызове Math.sqrt(-1) ) или когда функция, пытающаяся считать число из строки, терпит неудачу по причине того, что в строке не число ( parseInt(‘blabla’) ).

Проверка на равенство NaN

NaN является неравным (посредством сравнения через == , != , === , and !== ) любому другому значению, включая другое значение NaN. Используйте Number.isNaN() или isNaN() , чтобы наиболее понятным образом определить является ли значение значением NaN. Или выполните само-сравнение: NaN, и только NaN, в результате такого сравнения будет неравным самому себе.

NaN === NaN; // false Number.NaN === NaN; // false isNaN(NaN); // true isNaN(Number.NaN); // true function valueIsNaN(v)  return v !== v; > valueIsNaN(1); // false valueIsNaN(NaN); // true valueIsNaN(Number.NaN); // true 

Тем не менее, обратите внимание на разницу между функцией isNaN() и методом Number.isNaN() : первая вернёт true , если значение в настоящий момент является NaN , или если оно станет NaN после того, как преобразуется в число, в то время как последний вернёт true , только если текущим значением является NaN :

isNaN("hello world"); // true Number.isNaN("hello world"); // false 

Спецификации

Specification
ECMAScript Language Specification
# sec-value-properties-of-the-global-object-nan

Совместимость с браузерами

BCD tables only load in the browser

Number.NaN

Свойство Number.NaN представляет «не число». Эквивалентно глобальному объекту NaN .

Вам не нужно создавать объект Number для доступа к этому статическому свойству (используйте Number.NaN ).

Атрибуты свойства Number.NaN
Записываемое нет
Перечисляемое нет
Настраиваемое нет

Спецификации

Specification
ECMAScript Language Specification
# sec-number.nan

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • Глобальный объект NaN .
  • Объект Number , которому принадлежит это свойство.

JavaScript: NaN

Некоторые операции с бесконечностями приводят к странному результату, например, деление бесконечности на бесконечность. В математике такая операция не имеет никакого числового эквивалента. В JavaScript вернется NaN .

Infinity / Infinity; // NaN 

NaN — специальное значение «не число», которое обычно говорит о том, что была выполнена бессмысленная операция. Результатом практически любой операции, в которой участвует NaN , будет NaN .

NaN + 1; // NaN 

NaN интересное значение, хотя оно обозначает «не число» — с точки зрения типов, оно является числом. Парадокс. NaN никогда не является желаемым значением и появляется только в результате ошибок. Если вы его встретили, то нужно отследить момент, в котором выполнилась операция, недопустимая для чисел, и поправить это место.

Задание

Выполните операцию, которая приводит к NaN, и распечатайте её результат на экран с помощью console.log() .

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

isNaN

Функция 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 

Спецификация

Specification
ECMAScript Language Specification
# sec-isnan-number

Совместимость с браузерами

BCD tables only load in the browser

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *