JavaScript (lenguaje de programación): ¿Declarar una variable como “nulo” es lo mismo que declarar la variable indefinida?

No, la diferencia es que en el último caso de var x; , la variable adquiere el valor predeterminado de undefined .

Si bien undefined es similar a nulo, es un valor diferente.

  • Ambos son falsos. !!undefined === !!null === false
  • Son débilmente iguales con la coerción de tipo. undefined == null

Sin embargo,

  • No son idénticos undefined !== null

Aparte: un “problema” sobre undefined es que si bien es un valor muy real, no es una palabra clave en el lenguaje, por lo que cualquiera puede establecer undefined = true; en un estilo terriblemente malo si así lo eligen.

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.

Para averiguarlo, intente ejecutar el siguiente código en una consola:

  var testLab = function () {

 var a = nulo;
 var b = indefinido;

 si (a === b) {
     console.log ("Nulo e indefinido son lo mismo");
 }más{
     console.log ("No, supongo que son diferentes");
 }

 };

 testLab (); 

Tenga en cuenta que no es realmente necesario inicializar una variable como indefinida, solo lo hice aquí para mayor claridad.

Sin embargo, esa es la belleza de JavaScript, cada navegador es un laboratorio.