En JavaScript undefined
se puede reasignar, por lo que a menudo se recomienda crear una función autoejecutable que asegure que undefined no está definido. Como alternativa, null
y undefined
son definitivamente ==
pero ¿hay algún otro valor que sea vagamente equivalente a null/undefined
?JavaScript indefinido reemplazado por nulo
TLDR
Básicamente se puede reemplazar con seguridad esto:
(function(undefined){
window.f = function(obj){
if(obj===undefined || obj===null){
alert('value is undefined or null');
}
}
})();
con:
window.f = function(obj){
if(obj==null){
alert('value is undefined or null');
}
}
Si lo anterior es 100% seguro, ¿por qué no lo hace la comunidad JavaScript/caen las bibliotecas undefined
en total y use el condicional más corto x == null
para verificar ambos null
/undefined
a la vez?
EDIT:
nunca he visto a alguien en realidad representan un "valor desconocido" con 'indefinido' vs null
? Nunca he visto este escenario, y es por eso que originalmente hice la pregunta. Simplemente parece ser dos valores increíblemente confusos que nunca se usan en su intención original. Estandarizar todo para hacer una comparación obj==null
sería beneficioso para el tamaño y evitaría cualquier problema con la reasignación. Todo seguirá trabajando
var obj={};
obj.nonExistantProperty==null // true
var x;
ix==null // true
function(obj){
obj==null // true
}
La única excepción a esta regla parece ser al lanzar undefined
/null
a un entero. Este es un escenario bonito de edad, pero definitivamente debe tenerse en cuenta.
+(null)==0
mientras isNaN(+undefined)
Considerando NaN es el único valor en JavaScript no es igual a sí mismo, usted puede hacer algunas cosas bastante locas como:
+undefined == +undefined // false
+null == +null // true
Usando null
como una gota igualdad suelta ==
en reemplazo de undefined
es seguro, siempre que no tenga previsto convertir el valor en un número entero. Lo cual es un escenario muy bonito.
Puede usar 'null' en el código anterior como' void 0'. También podría argumentar que 'null' es un poco más fácil de leer y escribir luego' void 0'. Mi punto es que parece que no tiene ningún valor distinguir entre los dos. Aunque se supone que indefinido representa un "valor desconocido", en realidad nadie se apega a esta convención. Por lo tanto, parece beneficioso ignorar 'undefined' cada uno existente y simplemente usar' obj == null' en su lugar. – William
@Lime, consulte mis ediciones. –
Gracias, no estaba al tanto de cuáles eran los valores cuando se convertían en enteros. Tener 'NaN' vs' 0' es definitivamente diferente. Parece que '[null] .join ('')' y '[undefined] .join ('')' son equivalentes. – William