Подтвердить что ты не робот

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

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

typeof(...) != "undefined"

Есть ли точка, которую я не вижу?

По-моему, это действительно уродливо писать это вместо просто isUndefined(testValue).

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

NaN === NaN; // false

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

undefined === undefined; // true

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

  • Пусть num равно ToNumber (число).
  • ReturnIfAbrupt (число).
  • Если num - NaN, верните true.
  • В противном случае верните false.

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

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

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

Ответ 3

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

testValue === undefined

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

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

Ответ 4

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

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