Почему в 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 спецификация также объясняет это для нас тоже:
- пусть num-ToNumber (число).
- ReturnIfAbrupt(num).
- если num-NaN, верните true.
- в противном случае возвращает 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 (), последнюю, потому что она построена на Подчеркивать.