From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/global_objects/isnan/index.html | 133 +++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/isnan/index.html (limited to 'files/ru/web/javascript/reference/global_objects/isnan') diff --git a/files/ru/web/javascript/reference/global_objects/isnan/index.html b/files/ru/web/javascript/reference/global_objects/isnan/index.html new file mode 100644 index 0000000000..e61bdf3c8c --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/isnan/index.html @@ -0,0 +1,133 @@ +--- +title: isNaN +slug: Web/JavaScript/Reference/Global_Objects/isNaN +tags: + - Functions + - JavaScript + - Method + - NeedsUpdate + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/isNaN +--- +
{{jsSidebar("Objects")}}
+ +

Аннотация

+ +

Функция isNaN() определяет является ли литерал или переменная нечисловым значением ({{jsxref("Global_Objects/NaN", "NaN")}}) или нет. При работе с функцией необходимо проявлять осторожность так как она имеет свои особенности. В качестве альтернативы можно использовать метод {{jsxref("Number.isNaN()")}} из ECMAScript 6, или дополнительно проверять литерал или переменную на нечисловое значение при помощи typeof.

+ +

Синтаксис

+ +
isNaN(значение)
+ +

Параметры

+ +
+
Значение
+
Литерал или переменная которые будут проверяться на нечисловое значение.
+
+ +

Описание

+ +

Для чего нужна функция isNaN?

+ +

В отличие от других возможных значениях в JavaScript, при работе с значением данного типа невозможно полагаться на == и === для определения, является ли переменная или литерал нечисловым значением ({{jsxref("Global_Objects/NaN", "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. Полученное значение затем проверяется, является ли оно {{jsxref("Global_Objects/NaN", "NaN")}}. Таким образом для не числовых значений, которые можно преобразовать в числовой тип без не-NaN значения (в частности, пустая строка или логические примитивы, которые преобразуются в 0 или 1), возвращаемое значение "false" может быть полной неожиданностью; пустая строка преобразуется в  "not a number." Путаница связана с тем, что "not a number" имеет определённое значение, описанное в стандарте IEEE-794 чисел с плавающей точкой. Функцию стоит воспринимать в качестве ответа на вопрос, "Является ли это значение корректным числом по стандарту IEEE-794?"

+ +

В следующей версии ECMAScript (ES6) функция {{jsxref("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.StandardInitial definition.
{{SpecName('ES5.1', '#sec-15.1.2.4', 'isNaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-isnan-number', 'isNaN')}}{{Spec2('ES6')}} 
+ +

Поддержка браузерами

+ +

 

+ + + +

{{Compat("javascript.builtins.isNaN")}}

+ +

 

+ +

См. также

+ + -- cgit v1.2.3-54-g00ecf