nan javascript что это
NaN в JavaScript
Дата публикации: 2020-02-06
От автора: В данной статье мы познакомимся со специальным свойством NaN (Not-A-Number), которое является значением, представляющим не-число.
Тип числа в JavaScript содержит целые числа и числа с плавающей запятой:
Плюс есть два специальных числовых значения: Infinity (число больше, чем любое другое число) и NaN (представляющее концепцию «не число»):
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Хотя непосредственная работа с NaN редко встречается, оно может неожиданно появиться после неудачной операции с числами.
Давайте подробно рассмотрим специальное значение NaN: как проверить, содержит ли переменная NaN, и сценарии, которые в которых генерируется значения «не число».
1. Число NaN
Тип числа в JavaScript — это набор всех числовых значений, включая «не число», положительную бесконечность и отрицательную бесконечность.
«Not A Number» можно получить с помощью специального выражения NaN или как свойство глобального объекта или функции Number:
«Не число» — это значение, которое не представляет действительное число, несмотря на то, что оно имеет тип числа. Через NaN полезно представлять ошибочные операции с числами. Например, умножение числа на undefined не является допустимой операцией, поэтому дает NaN:
Также попытка разобрать недопустимую числовую строку, например, ‘Joker’ приводит к NaN:
2. Проверка на равенство с NaN
Интересным свойством NaN является то, что оно не равно ни одному значению, даже самому себе:
Это поведение полезно для определения, является ли переменная NaN:
Разница между этими функциями заключается в том, что Number.isNaN() не преобразуется свой аргумент в число:
isNaN(‘Joker12′) преобразует аргумент ‘Joker12′ в число, которое является NaN. Таким образом, функция возвращает true.
С другой стороны, Number.isNaN(‘Joker12′) проверяет аргумент без преобразования. Функция возвращает false, потому ‘Joker12′ не равно NaN.
3. Операции, дающие NaN
3.1 Парсинг чисел
В JavaScript вы можете преобразовать числовые строки в числа. Например, вы можете легко преобразовать строку ’1.5′ в число с плавающей запятой 1.5:
Когда строка не может быть преобразована в число, функция синтаксического анализа возвращает NaN: указывая, что синтаксический анализ не выполнен. Вот некоторые примеры:
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
При парсинге чисел рекомендуется проверить, не является ли результат парсинга NaN:
Парсинг inputToParse не удался, поэтому parseInt(inputToParse, 10) возвращается NaN. Условие if (isNaN(number)) оценивается, как true, и 0 назначается number.
3.2 undefined в качестве операнда
При использовании undefined в качестве операнда в арифметических операциях, таких как сложение, умножение и т д. мы получаем NaN. Например:
getFontSize() — это функция, которая обращается к свойству fontSize из объекта стиля. При вызове getFontSize(< size: 16 >) результатом будкт undefined (свойство fontSize не существует в объекте < size: 16 >). fontSize * 2 оценивается как undefined * 2, что дает NaN.
«Not A Number» генерируется, когда в качестве значения в арифметических операциях используется отсутствующее свойство или функция, возвращающая undefined. Отсутствие undefined в арифметических операциях — это хороший способ предотвратить получение NaN.
3.3 NaN как операнд
Значение NaN также генерируется, когда операндом в арифметических операциях является NaN:
NaN распространяется на арифметические операции:
Операции с переменной result прерываются после добавления к result значения invalidNumber (которое является NaN).
3.4 Неопределенные формы
Значение NaN создается, когда арифметические операции имеют неопределенные формы. Деление 0 / 0 и Inifinity / Infinity:
Умножение 0 и Infinity:
Сложение бесконечных чисел с разными знаками:
3.5 Неверные аргументы математических функций
Квадратный корень из отрицательного числа:
Или логарифм отрицательного числа:
4. Заключение
Понятие «не число», выраженное в JavaScript с помощью NaN, полезно для представления ошибочных операций над числами. NaN не равно ни одному значению, даже самому себе. Рекомендуемый способ проверить, содержит ли переменная NaN — использовать Number.isNaN(value).
Преобразование числовых строк в числа, в случае неудачи может дать NaN. Рекомендуется проверять, не возвращают ли parseInt(), parseFloat() или Number() NaN.
Если undefined или NaN используются в качестве операнда в арифметических операциях, это обычно приводит к NaN. Правильная обработка undefined (предоставление значений по умолчанию для отсутствующих свойств) является рекомендованным подходом для предотвращения этой ситуации.
Неопределенные формы или недопустимые аргументы для математических функций также приводят получению NaN. Но это случается редко. Вот мой практический совет: «Получили NaN? Ищите undefined!»
Автор: Dmitri Pavlutin
Редакция: Команда webformyself.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Числа в JavaScript. Значение NaN
Дата публикации: 2016-11-02
От автора: приветствую вас, друзья. Мы продолжаем статьи по изучению JavaScript и в этой статье мы с вами продолжим более подробно говорить о числах в JavaScript. Здесь мы узнаем некоторые особенности работы с числовым типом данных в JavaScript, а также некоторые методы для работы с числами.
Давайте познакомимся с еще одним специальным значением числового типа — NaN (Not a Number, не число). Этим значением JavaScript помечает любой неопределенный результат математической операции. Например, деление на ноль, как мы уже видели, приведет к бесконечности. Но, не всегда, как оказывается. На самом деле, если поделить на ноль сам ноль, то результат будет не определен:
При этом, если мы проверим тип получаемого значения, то это будет число — number:
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Как и в случае с Infinity, любая операция с NaN приведет к такому же неопределенному значению:
В JavaScript есть специальная функция, которая позволяет проверить, является ли переданное значение значением NaN. Функция isNaN вернут true если это так, для прочих результатов числовых значений будет возвращено false:
Числа (объект Number)
В JavaScript существует только один тип числовых данных. Числа могут записываться как с десятичной точкой, так и без нее:
Очень большие и очень малые числа могут записываться при помощи научной (экспоненциальной) нотации (имеет вид Mep, где M – число, e — означает «умножить на 10 в степени. «, p – порядок или степень, в которую возводится 10):
В JavaScript числа всегда 64-битные с плавающей точкой
В отличие от многих других языков программирования JavaScript не определяет множество различных числовых типов вроде целочисленные без знака, с плавающей точкой, короткие, длинные и т.п.
В JavaScript все числа всегда хранятся как числа с плавающей точкой двойной точности в соответствии с международным стандартом IEEE 754.
По данному стандарту числа хранятся в 64 битах, где показатель числа (мантисса) хранится в битах с 0 по 51, порядок в битах с 52 по 62 и показатель знака в бите 63:
Точность
Целые числа (без периода или экспоненциальной нотации) имеют точность до 15 цифр.
Максимальное количество знаков после десятичной точки — 17, однако вычисления с участием чисел с плавающей точкой не всегда бывают точны на 100%:
Решить данную проблему помогает одновременное умножение и деление:
Сложение чисел и строк
ВНИМАНИЕ!! JavaScript использует оператор + как для сложения чисел, так и для объединения строк (конкатенации). Числа складываются. Строки объединяются.
Если вы складываете два числа, результатом будет число:
Если вы складываете две строки, результатом будет объединенная строка:
Если вы складываете число и строку, результатом будет объединенная строка:
Обычной ошибкой является в следующем примере ожидать, что результатом будет 30:
Обычной ошибкой является в следующем примере ожидать, что результатом будет 102030:
Интерпретатор JavaScript обрабатывает код слева направо. Таким образом, сначала будет вычислена сумма 10 + 20, так как x и y числа. А затем будет проведена конкатенация строк 30 + «30», потому что z — строка.
Числовые строки
Строки JavaScript могут содержать числовой контент:
JavaScript будет стараться конвертировать строки в числа во всех арифметических операциях.
Это тоже сработает:
А вот это не сработает:
В последнем примере JavaScript использует оператор + для конкатенации строк.
NaN (Не число)
NaN — зарезервированное в JavaScript слово, обозначающее, что некое числовое значение является некорректным.
Например, попытка выполнить арифметическую операцию с не числовой строкой вернет в результате NaN (Не число):
Тем не менее, если строка содержит числовое значение, результатом будет число:
Вы можете использовать глобальную JavaScript функцию isNaN(), чтобы выяснить является ли значение числом:
Остерегайтесь значения NaN. Если вы используете NaN в математических операциях, результат также будет NaN:
Или результатом может быть конкатенация:
NaN имеет числовой тип: typeof NaN вернет number:
Infinity (Бесконечность)
Если при вычислении результат выходит за пределы максимально допустимого числа, то в JavaScript возвращается значение Infinity (или -Infinity).
Деление на 0 (ноль) также генерирует значение Infinity:
Infinity имеет числовой тип: typeof Infinity вернет number:
Шестнадцатеричные числа
Если числовая константа начинается с символов 0x, то она интерпретируется JavaScript как шестнадцатеричное число.
Внимание! Никогда не записывайте числа в виде значения, начинающегося с нуля (например, 07). Некоторые версии JavaScript интерпретируют такие числа, как записанные в восьмеричном формате.
По умолчанию, JavaScript отображает числа в виде десятеричных значений. Однако при необходимости вы можете вывести числа в любой из трех систем счисления: с основанием 16 (шестнадцатеричная), с основанием 8 (восьмеричная) или с основанием 2 (бинарная). Для этого нужно воспользоваться методом toString():
Числа могут быть объектами
Обычно, числа JavaScript это примитивные значения – литералы:
Однако, при помощи ключевого слова new числа также можно определить и как объекты:
Тем не менее, не определяйте числа как объекты. Это замедляет скорость выполнения скрипта. Кроме этого, ключевое слово new в данном случае усложняет код и может привести к неожиданным результатам:
При использовании оператора сравнения ==, одинаковые числа равны:
Однако, при использовании оператора сравнения ===, одинаковые числа не будут равными, потому что оператор === ожидает совпадения как по значению, так и по типу.
Или еще хуже. Объекты не сравниваются:
Обратите внимание на разницу между (x==y) и (x===y).
Сравнение двух объектов JavaScript всегда возвращает ложь (false).
Форум
Справочник
isNaN
Синтаксис
Аргументы
Описание, примеры
Эта функция полезна, так как значение NaN не может быть проверено операторами эквивалентности.
самая банальная проверка на NaN это: NaN == NaN всегда будет false
т.е. переменная не равна сама себе
var a = NaN;
isNaN(a) // true
a!=a // true
Зачем тогда вообще эта функция нужна, если она строки считает NaN’ами?
Спасибо! Очень полезный сайт!
Очень нужный сайт! Никогда не догадался бы, что объязательно нужно делать так!
isNaN(null) также false
единственный верный вариант, своего рода костыль
isMyNaN(undefined)
false
isMyNaN(‘e’)
false
isMyNaN(‘1’)
false
isMyNaN(1)
false
isMyNaN(null)
false
isMyNaN(true)
false
неверно, оно вернёт false если значение === самому себе, то есть любой символ, любая строка и любое число. Даже true вернёт false
isNaN(undefined)
true
isMyNaN(undefined)
true
isNaN(‘1’)
false
isMyNaN(‘1’)
false
isNaN(null)
false
isMyNaN(null)
false
действительно
isNaN(undefined); //true
И Как сравнить теперь undefined и Nan?
isNaN(«Hi») // true
Если проверить любую строку, вернется true
Не любую
isNaN(«12») // false
isNaN(«0x12») // false
isNaN(«x12») // true
isNaN(«12x») // true
Если вопрос в корректности использования isNaN(), то.
Тоже костыль, конечно.
Но, по крайней мере для таких значений s, как undefined, null и ‘test’ (см. выше) отработало корректно.
Как задать в функции отсутствие аргументов?
Просто так. function foo()
Метод isNaN пытается преобразовать переданный параметр в число. Если параметр не может быть преобразован, возвращает true, иначе возвращает false.
Примитивные типы данных
Пришло время познакомиться с примитивными типами данных в JavaScript. В самом простом случае, когда мы объявляем переменную вот так:
то переменная принимает числовой тип (number). Этот пример показывает, что тип переменной определяется типом данных, которые мы ей присваиваем. Если переменной присвоить строку:
то переменная b принимает строковый тип. В JavaScript существует семь основных типов данных. Рассмотрим их по порядку.
Числовой тип (number)
Числовой тип данных представляет как целочисленные значения, так и числа с плавающей точкой. Например, обе эти переменные будут относиться к числовому типу:
Однако, на практике чаще всего используются целые и приближенные к вещественным.
Оператор typeof
Чтобы узнать тип переменной используется оператор typeof, который имеет такой синтаксис:
его можно вызывать как со скобками, так и без скобок. Обычно используют первый вариант. Выведем тип переменной a:
Мы видим значение number – числовой тип.
Infinity и NaN
Кроме обычных чисел, существуют так называемые «специальные числовые значения», которые относятся к этому же типу данных:
Infinity представляет собой математическую бесконечность ∞. Это особое значение, которое больше любого числа. Мы можем получить его в результате деления на ноль:
или задать его явно:
Мы можем также получить бесконечность, если попытаемся записать в переменную очень большое число, которое выходит за пределы представления чисел в JavaScript. Например, такое:
Следующее значение NaN (от англ. Not a Number – не число) означает вычислительную ошибку. Это результат неправильной или неопределённой математической операции, например:
Значение NaN «прилипчиво». Любая операция с NaN возвращает NaN:
Значения Infinity и NaN хотя и относятся к числовым типам, но скорее являются индикаторами, говорящими разработчику скрипта что пошло не так.
Строковый тип (string)
Как мы говорили на предыдущем занятии, строки можно задавать через такие кавычки:
Получим строку «Значение a = 3». Все это работает только с обратными кавычками. Если их заменить на простые, то никакой подстановки не произойдет:
Тем, кто знаком с другими языками программирования следует знать, что в JavaScript нет типа данных для отдельного символа (типа char). Здесь есть только строки и даже один символ – это строка из одного символа.
А как быть, если мы хотим в строке записать кавычки? Например, так:
Есть несколько способов это сделать. Первый – заменить двойные кавычки всей строки на одинарные:
Второй способ – использовать так называемое экранирование символов:
мы здесь перед каждой кавычкой внутри строки поставили обратный слеш. Это называется экранированием символов. На практике используются оба способа, так что выбирайте любой удобный для себя. Кстати, если нужно просто отобразить обратный слеш, то его следует записать так:
Булевый (логический) тип
Булевый тип (boolean) может принимать только два значения: true (истина) и false (ложь). Такой тип, как правило, используется для хранения значений да/нет: true значит «да, правильно», а false значит «нет, не правильно». Например:
Булевые значения также могут быть получены из результатов сравнения:
и часто применяются в условных операторах, о которых мы будем говорить на последующих занятиях.
Значение «null»
Специальное значение null не относится ни к одному из типов, описанных выше. Оно формирует отдельный тип, который содержит только значение null:
В JavaScript null не является «ссылкой на несуществующий объект» или «нулевым указателем», как в некоторых других языках. Это просто специальное значение, которое представляет собой «ничего», «пусто» или «значение неизвестно».
Значение «undefined»
Это свой тип данных, который имеет только одно значение undefined, означающее, что значение не было присвоено. Если переменная объявлена, но ей не присвоено никакого значения, то её значением будет undefined:
По идее мы можем присвоить значение undefined любой переменной:
Но так делать не рекомендуется. Если нам нужно отметить, что переменная не содержит данных, то для этого используется значение null, а undefined – только для проверок: была ли переменная инициализирована или по каким-то причинам ей «забыли» присвоить значение.
Тип Symbol
Это новый тип данных (symbol), который впервые появился в спецификации ES6. Он используется для создания уникальных идентификаторов. Например, так:
И в большей степени он удобен для дальнейшего развития JavaScript. Чтобы можно было добавлять новые идентификаторы, не меняя код, в котором он уже мог использоваться.
Символы создаются конструктором Symbol() и могут дополняться необязательным описанием:
Их уникальность можно проверить оператором идентичности, о котором мы будем говорить на следующих занятиях. Здесь приведу лишь пример:
В некоторой степени они похожи на объекты, но относятся к примитивным типам.
Если сейчас вам не совсем понятно, что такое Symbol, просто пропустите этот момент. Когда придет время для его использования, все встанет на свои места.
Видео по теме
JavaScipt #1: что это такое, с чего начать, как внедрять и запускать
JavaScipt #2: способы объявления переменных и констант в стандарте ES6+
JavaScript #3: примитивные типы number, string, Infinity, NaN, boolean, null, undefined, Symbol
JavaScript #4: приведение типов, оператор присваивания, функции alert, prompt, confirm
JavaScript #6: условные операторы if и switch, сравнение строк, строгое сравнение
JavaScript #7: операторы циклов for, while, do while, операторы break и continue
JavaScript #8: объявление функций по Function Declaration, аргументы по умолчанию
JavaScript #9: функции по Function Expression, анонимные функции, callback-функции
JavaScript #10: анонимные и стрелочные функции, функциональное выражение
JavaScript #11: объекты, цикл for in
JavaScript #12: методы объектов, ключевое слово this
JavaScript #13: клонирование объектов, функции конструкторы
JavaScript #14: массивы (array), методы push, pop, shift, unshift, многомерные массивы
JavaScript #15: методы массивов: splice, slice, indexOf, find, filter, forEach, sort, split, join
JavaScript #16: числовые методы toString, floor, ceil, round, random, parseInt и другие
JavaScript #18: коллекции Map и Set
JavaScript #19: деструктурирующее присваивание
JavaScript #20: рекурсивные функции, остаточные аргументы, оператор расширения
JavaScript #21: замыкания, лексическое окружение, вложенные функции
JavaScript #22: свойства name, length и методы call, apply, bind функций
JavaScript #23: создание функций (new Function), функции setTimeout, setInterval и clearInterval
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта