2016-07-06 4 views
3

Хорошо, поэтому я изучаю Javascript в течение 3 месяцев и получил довольно хорошую экспозицию для решения нескольких задач. В начале моей книги у них есть примеры NaN, но они обычно включают такие вещи, какПочему NaN полезен и в каких ситуациях

NaN === NaN;  // false 
Number.NaN === NaN; // false 
isNaN(NaN);   // true 
isNaN(Number.NaN); // true 

Я даже смотрел на других StackOverflow должности и я до сих пор не вижу сценарий, где я могу использовать его. Как говорится, в каких ситуациях эта глобальная собственность помогает мне? Каковы некоторые практические ситуации в реальной программе?

+0

вы можете сравнить NaN с sql 'null'. «Неизвестное» значение или произошла ошибка. Это ядовито, потому что он сделает что-нибудь еще, используя NaN-значение NaN сам, например. 'var foo = 1 + NaN' дает вам« NaN »в результате, а не' 1'. после возникновения ошибки вы не хотите продолжать это плохое значение, потому что ваши результаты становятся неопределенными в этой точке. и точно так же, как sql null, вам нужно использовать специальные инструменты для его обнаружения, например. 'isNaN()' v.s. sql 'is null. –

+0

'var helloWorld = 'hello world'; isNaN (helloWorld - 1) 'простой. –

+0

Обычно при выполнении любого типа арифметики, в которой вы используете переменные из неизвестного источника (пользователя, базы данных, api и т. Д.), Это помогает проверить, что полученный результат - это число, прежде чем перейти к более математике, которая требует это значение. – Jack

ответ

1

NaN это число, которое является результатом математических операций, которые не имеют никакого смысла:

Number('abc'); // NaN 
0/0;   // NaN 
Math.sqrt(-1); // NaN 
Math.log(-1); // NaN 
Math.asin(2); // NaN 

Когда вы делаете некоторые математические opertion и некоторые из операндов является NaN, он будет распространяться на результат:

NaN + 2;   // NaN 
NaN * 0;   // NaN 
1/NaN;   // NaN 
Math.pow(NaN, 2); // NaN 
-1

NaN является наиболее полезным, когда у вас есть значение, которое не является числом (но должно было быть). Вы получите только NaN обратно от стандартных API, в нескольких местах, в частности parseInt:

Функция ParseInt преобразует свой первый аргумент в строку, разбирает его, и возвращает целое число или NaN.

Большая часть стоимости здесь является то, что когда-то NaN был введен в цепь математических операторов, определены операции (даже если они не будут иметь смысл с исходными операндами, таким образом производя NaN) и продолжить возврат NaN. Большинство операторов математики, как вы можете видеть от the / instructions, имеют предложение немедленно возвратить NaN, если один из операндов уже не является числом.

+0

Как именно вы намерены, чтобы что-то было числом, но тогда это не так? Просто интересно, как это работает. –

+0

Как @Jack, упомянутый в комментариях к вопросу, пользовательский ввод (или ввод сервера, или действительно любой внешний источник). 'NaN' существует, чтобы сохранить допустимую цепочку операций, когда вы получаете недопустимый вывод. Вместо того, чтобы бросать, потому что неудачный ввод случайно сделал некоторый op 'x/0', вы получаете' x/NaN' и определенный (если мусор) вывод. – ssube

+0

@cresjoy 'Math.sqrt (-1)' дает 'NaN', как и многие другие« недопустимые »математические операции, предназначенные для чисел. –

Смежные вопросы