En JavaScript, hay dos valores que básicamente dicen 'No existo' undefined
y null
.
Una propiedad a la que un programador no ha asignado nada será undefined
, pero para que se convierta en una propiedad null
, null
debe asignársele explícitamente.
Una vez pensé que había una necesidad null
porque undefined
es un valor primitivo y null
un objeto. No lo es, incluso si typeof null
cederá 'object'
: en realidad, ambos son valores primitivos, lo que significa que ni undefined
ni null
pueden 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 false
en contextos booleanos. La única diferencia real en la que puedo pensar es que uno evalúa y NaN
el otro 0
en contextos numéricos.
Entonces, ¿por qué hay ambos undefined
y null
si esto solo confunde a los programadores que están verificando incorrectamente null
cuando 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 null
que no se pueda expresar usando en su undefined
lugar.
Entonces, el consenso general parece ser que undefined
significa 'no existe tal propiedad' mientras que null
significa 'la propiedad existe, pero no tiene valor'.
Podría vivir con eso si las implementaciones de JavaScript realmente hicieran cumplir este comportamiento, pero undefined
es 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 in
operador o de hasOwnProperty()
todos modos. Entonces, una vez más: ¿cuál es el uso práctico de valores separados para undefined
y null
?
De hecho, lo uso undefined
cuando quiero desarmar los valores de las propiedades que ya no se usan pero que no quiero delete
. ¿Debería usar null
en su lugar?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.
No, solo undefined
dice eso.
undefined
.