Otros ya han dado la respuesta a esto: no, no son lo mismo, aunque son similares. Sin embargo , me imagino que sería curioso saber por qué .
En lenguajes estáticamente orientados a objetos, nulo representa una variable que es un tipo de objeto pero que aún no se ha inicializado a un valor. Si la pila de programación es como una caja de tus objetos y tu mano es la variable, cuando dices “Quiero un bloque de la caja”, escribes
Bloque de mano;
Sin embargo, no tienes un bloque en la mano. Sabes que tu mano sostendrá un bloque, pero aún no lo está. Entonces, cuando alguien pregunta sobre el bloque en tu mano, dices “¿qué bloque? ¡No estoy sosteniendo un bloque!” – Este es su valor nulo.
null.equals (hand) == verdadero;
Sin embargo, JavaScript no se escribe estáticamente, por lo que las variables pueden contener diferentes tipos de datos. Esto es especulación de mi parte, pero creo que indefinido es su forma de decir “Bueno, tengo mi mano aquí, pero no tengo idea de lo que está pasando. Podría ser un bloque, un automóvil de juguete o tal vez un libro. Ya veremos “.
var mano;
mano === indefinido;
En JavaScript, nulo se considera un valor y generalmente se usa cuando intenta recuperar un objeto (digamos de una API) que no existe.
Dato curioso: dado que JavaScript sigue un modelo de herencia prototípico, cada objeto personalizado tiene el objeto Object en su cadena de prototipo. ¿El prototipo del objeto? Nulo. Entonces, uno puede crear un objeto que herede directamente de nulo y no tenga nada heredado del objeto Object.
(¡No intenten esto en casa, niños!)
var heredaFromNull = Object.create (nulo, {foo: {valor: “bar”}});
hereitsFromNull.foo === “barra”;
Entonces, normalmente heredaFromNull.hasOwnProperty (“foo”) devolvería verdadero, porque el objeto tiene una propiedad llamada “foo”. Sin embargo, este es un método heredado del objeto Object, por lo que en este caso se arrojaría un error a la consola que indica que hasOwnProperty no existe en hereitsFromNull.
Soy móvil ahora, por lo que puede haber errores en mi código, pero estoy seguro de que he visto la herencia de nulo antes. No lo hagas, a menos que realmente sepas lo que estás haciendo.