number - nan javascript parseint
¿Por qué hay una función isNaN() en JavaScript pero no isUndefined()? (4)
¿Por qué hay una función isNaN()
en JavaScript mientras que isUndefined()
debe escribirse como:
typeof(...) != "undefined"
¿Hay un punto que no veo?
En mi opinión, es realmente feo escribir esto en lugar de simplemente isUndefined(testValue)
.
El caso de uso var === undefined
funciona en casi todas partes, excepto en los casos cubiertos por esta respuesta , donde a undefined
se le asigna un valor, o var
no está definido.
La razón por la cual una función de este tipo no puede existir es clara en este último caso. Si var
no está definido, al llamar a la supuesta función isUndefined(var)
generará un isUndefined(var)
ReferenceError
. Sin embargo, introducir una nueva palabra clave, por ejemplo, isundefined var
podría solucionar este problema.
Pero a pesar de ser válido, los dos casos anteriores son malos usos de javascript. Esta es la razón por la que creo que tal palabra clave no existe.
Esta no es una respuesta directa a la pregunta, ya que otros ya han respondido, es más importante resaltar las bibliotecas que contienen una función isUndefined () para cualquiera que busque una solución rápida y están en condiciones de usarlas.
Tanto el guión bajo como el guión bajo contienen una función isUndefined (), esta última, porque se basa en el guión bajo.
Simplemente no hay necesidad de una función isUndefined()
. La razón detrás de esto se explica en la especificación ECMAScript :
(Tenga en cuenta que el valor NaN es producido por la expresión de programa NaN). En algunas implementaciones, el código externo podría detectar una diferencia entre varios valores de No-a-Número, pero tal comportamiento depende de la implementación; Para el código ECMAScript, todos los valores de NaN son indistinguibles entre sí .
La función isNaN()
actúa como una forma de detectar si algo es NaN
porque los operadores de igualdad no funcionan (como es de esperar, ver más abajo) en él. Un valor de NaN
no es igual a otro valor de NaN
:
NaN === NaN; // false
undefined
por otro lado, es diferente, y los valores undefined
son distinguibles:
undefined === undefined; // true
Si tiene curiosidad por saber cómo funciona la función isNaN()
, la especificación ECMAScript también lo explica para nosotros también:
- Deje que num sea ToNumber (número).
- ReturnIfAbrupt (num).
- Si num es NaN, devuelve verdadero.
- De lo contrario, devuelve falso.
Una forma confiable para que el código ECMAScript pruebe si un valor X es un NaN es una expresión de la forma X! == X. El resultado será verdadero si y solo si X es un NaN.
NaN !== NaN; // true
100 !== 100; // false
var foo = NaN;
foo !== foo; // true
isUndefined
podría escribirse como
testValue === undefined
Como por cualquier otro valor.
Esto no funciona con NaN
, sin embargo, como NaN !== NaN
. Sin la capacidad de usar una comparación, se necesitaba una función isNaN
para detectar valores de NaN
.