Почему существует функция isNaN()
в JavaScript, а isUndefined()
должна быть записана как:
typeof(...) != "undefined"
Есть ли точка, которую я не вижу?
По-моему, это действительно уродливо писать это вместо просто isUndefined(testValue)
.
Почему существует функция isNaN()
в JavaScript, а isUndefined()
должна быть записана как:
typeof(...) != "undefined"
Есть ли точка, которую я не вижу?
По-моему, это действительно уродливо писать это вместо просто isUndefined(testValue)
.
Случай использования var === undefined
работает почти везде, за исключением случаев, охватываемых этим ответом, где либо undefined
присваивается значение, либо var
undefined.
Причина, по которой такая функция не может существовать, ясно из последнего случая. Если var
- undefined, то вызов предполагаемой функции isUndefined(var)
приведет к ReferenceError
. Однако ввод нового ключевого слова, например. isundefined var
может решить эту проблему.
Но, несмотря на то, что оба из этих случаев являются действительными, плохое использование javascript. Именно по этой причине я считаю, что такого ключевого слова не существует.
Просто нет необходимости в функции 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
isUndefined
может быть записано как
testValue === undefined
как для любого другого значения.
Это не работает с NaN
, однако, как NaN !== NaN
. Без возможности использования сравнения была необходима функция isNaN
для обнаружения значений NaN
.
Это не прямой ответ на вопрос, так как другие уже ответили, это больше, чтобы выделить библиотеки, содержащие функцию isUndefined() для любого, кто ищет быстрое решение, и они могут их использовать.
Подчеркивание и Lo-dash содержат функцию isUndefined(), последняя, потому что она построена на Underscore.