var a = {}; console.log(a.__proto__); // shows the base object console.log(a.__proto__.__proto__); // shows the prototype of the base object as "null".¿Por qué no está indefinido (ya que nunca se declara como una propiedad en el objeto base)?
null indica una ausencia intencional de un valor, normalmente de un valor de objeto. De la especificación :
valor nulo
valor primitivo que representa la ausencia intencional de cualquier valor de objeto
En contraste, para undefined dice :
valor indefinido
valor primitivo utilizado cuando a una variable no se le ha asignado un valor
El prototipo de Object.prototype está configurado intencionalmente para indicar que no hay prototipo, y los objetos prototipo por separado son, bueno, objetos, por lo que null para "sin objeto" tiene más sentido.
Dicho esto, tenga cuidado con las preguntas "por qué" con JavaScript, porque aunque la mayoría de ellas tienen explicaciones perfectamente razonables, algunas de las cosas más extrañas se reducen a "Porque eso es lo que Brendan Eich pensó que debería hacer en ese momento" y/o " Debido a que hubo un error en la implementación original que fue copiado por otras implementaciones y no se podía cambiar sin romper el código existente, por lo que tuvo que incluirse en la especificación". (Por ejemplo, es por eso que typeof null es "object" en lugar de "null" .) No estoy diciendo que no haga preguntas con "por qué", porque, de nuevo, a menudo hay una buena razón que puede conducir a una mejor comprensión del idioma. Solo ten en cuenta que a veces, bueno, simplemente no lo hay.😀