En JavaScript, hay dos valores que básicamente dicen 'No existo' undefinedy null.
Una propiedad a la que un programador no ha asignado nada será undefined, pero para que se convierta en una propiedad null, nulldebe asignársele explícitamente.
Una vez pensé que había una necesidad nullporque undefinedes un valor primitivo y nullun objeto. No lo es, incluso si typeof nullcederá 'object': en realidad, ambos son valores primitivos, lo que significa que ni undefinedni nullpueden devolverse desde una función de constructor, ya que ambos se convertirán en un objeto vacío (uno tiene que lanzar un error para proclamar falla en los constructores).
Ambos también se evalúan falseen contextos booleanos. La única diferencia real en la que puedo pensar es que uno evalúa y NaNel otro 0en contextos numéricos.
Entonces, ¿por qué hay ambos undefinedy nullsi esto solo confunde a los programadores que están verificando incorrectamente nullcuando intentan averiguar si se ha establecido una propiedad o no?
Lo que me gustaría saber es si alguien tiene un ejemplo razonable en el que sea necesario usar y nullque no se pueda expresar usando en su undefinedlugar.
Entonces, el consenso general parece ser que undefinedsignifica 'no existe tal propiedad' mientras que nullsignifica 'la propiedad existe, pero no tiene valor'.
Podría vivir con eso si las implementaciones de JavaScript realmente hicieran cumplir este comportamiento, pero undefinedes un valor primitivo perfectamente válido, por lo que puede asignarse fácilmente a propiedades existentes para romper este contrato. Por lo tanto, si desea asegurarse de que existe una propiedad, debe usar el inoperador o de hasOwnProperty()todos modos. Entonces, una vez más: ¿cuál es el uso práctico de valores separados para undefinedy null?
De hecho, lo uso undefinedcuando quiero desarmar los valores de las propiedades que ya no se usan pero que no quiero delete. ¿Debería usar nullen su lugar?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.No, solo undefineddice eso.
undefined.