2013-07-23 2 views
5

Почему языки программирования имеют значение NaN?Зачем нам нужно значение NaN, когда мы можем использовать TypeErrors?

Math.floor('string'); //--> NaN 

Почему бы не просто выбросить TypeError?

TypeError: Expected number instead of string 

вопрос помечается как и , поскольку JavaScript является языком я в основном знакомы, но я знаю, что это относится и к другим языкам, а также.

+0

Потому что исключения - это боль в шее :) – Pointy

+0

@Pointy Ловить их, похоже, не так сложно. –

+1

Они вводят своего рода нелинейность в коде. Это не так много, что это сложно *, это просто отвлекает и беспорядочно. – Pointy

ответ

4

На типизированных языках вы должны поместить число в числовую переменную, даже если у вас нет номера. Вы ставите NaN (поэтому typeof NaN - это "number" в JavaScript). Это точно так же, как null для ссылок на объекты, когда у вас нет лучшего.

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

Обратите внимание, что NaN также может быть результатом математической операции, когда невозможно решить, какой должен быть результат (например, 0 * Infinity). С этим проще обращаться с NaN, чем включать ветвление во все операции.

+0

Спасибо! Вы делаете интересную аналогию «NaN: number :: null: object» –

+1

@Web_Designer Обратите внимание, что 'typeof null' является' "объектом" ':) –

3

JavasScript - это слабо типизированный язык. Ошибка бросания стоит дорого. Просмотрите jquery или подчеркивание, и вы увидите, что ошибки редко возникают, только для «исключительных» случаев. Это менее дорогостоящим и более удобным для решения таких вопросов, как NaN.

4

Для того чтобы быть неконструктивным, это потому, что NaN s (а также другие нечисловые величины, такие как бесконечность) являются частью IEEE 754 floating-point standard, которые реализуются многими языками программирования.

Он предназначен для вычисления «особых случаев» в числовом вычислении, который может быть оценен как обычные числа без прерывания вычислений. Это не означает никаких исключений. Вместо этого, NaNs обычно распространяются через операции, пока они не выйдут с другой стороны, к лучшему или к худшему.

+1

да, хотя в данном конкретном случае это * мало * сомнительно, чтобы возвратить' NaN '. – Pointy

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