Почему в JavaScript есть функция isNaN (), но нет isUndefined ()?

Почему isNaN() функция в JavaScript, в то время как isUndefined() должно быть записано как:

typeof(...) != "undefined"

что-то я не вижу?

на мой взгляд очень некрасиво писать это, а не просто isUndefined(testValue).

4 ответов


использовать случае var === undefined работает почти везде, за исключением случаев, охватываемых ответ, где undefined присваивается значение, или var неопределено.

причина, по которой такая функция не может существовать, ясна из последнего случая. Если var не определено, затем вызывается предполагаемая функция isUndefined(var) в результате ReferenceError. Однако введение нового ключевого слова, например isundefined var можно решить эту проблему.

но несмотря на то, что действует, как из вышеперечисленных случаев плохое использование javascript. Вот почему я считаю, что такого ключевого слова не существует.


просто нет необходимости . Причина этого объясняется в спецификация ECMAScript:

(обратите внимание, что значение NaN создается программным выражением NaN.) В некоторых реализациях внешний код может обнаруживать разницу между различными значениями не-числа, но такое поведение зависит от реализации; для кода ECMAScript,все значения NaN неотличимы друг от друга другое.

на isNaN() функция действует как способ определить, является ли что-то NaN потому что операторы равенства не работают (как вы ожидаете, см. ниже) на нем. Один NaN значение не равно другому NaN значение:

NaN === NaN; // false

undefined С другой стороны отличается, и undefined значения различаются:

undefined === undefined; // true

Если вам интересно, как isNaN() функция работает, ECMAScript спецификация также объясняет это для нас тоже:

  1. пусть num-ToNumber (число).
  2. ReturnIfAbrupt(num).
  3. если num-NaN, верните true.
  4. в противном случае возвращает false.

надежный способ для кода ECMAScript проверить, является ли значение X NaN выражением формы X !== Х. В результате быть истинным тогда и только тогда, когда X-NaN.

NaN !== NaN; // true
100 !== 100; // false

var foo = NaN;
foo !== foo; // true

isUndefined может быть записан как

testValue === undefined

как и для любого другого значения.

это не работает с NaN однако,NaN !== NaN. Без возможности использовать сравнение, возникла необходимость в isNaN функция обнаружения NaN значения.


Это не прямой ответ на вопрос, как уже ответили другие, это больше, чтобы выделить библиотеки, которые содержат функцию isUndefined() для тех, кто ищет быстрое решение, и они в состоянии их использовать.

подчеркивание и Lo-dash содержат функцию isUndefined (), последнюю, потому что она построена на Подчеркивать.