¿Por qué se considera nulo un objeto en JavaScript?

De hecho, nulo no es un objeto, pero es la única instancia de su propio tipo: nulo. “Typeof null” devuelve “object” básicamente debido a un error que quedó de la primera implementación de JavaScript que no se puede cambiar ahora porque rompería demasiado código existente.

Ver: La historia de “typeof null”

El error “typeof null” es un remanente de la primera versión de JavaScript. En esta versión, los valores se almacenaron en unidades de 32 bits, que consistían en una etiqueta de tipo pequeña (1-3 bits) y los datos reales del valor. Las etiquetas de tipo se almacenaron en los bits inferiores de las unidades. Había cinco de ellos:

  • 000: objeto. Los datos son una referencia a un objeto.
  • 1: int. Los datos son un entero con signo de 31 bits.
  • 010: doble. Los datos son una referencia a un número de coma flotante doble.
  • 100: cuerda. Los datos son una referencia a una cadena.
  • 110: booleano. Los datos son booleanos.

JavaScript nulo se implementó como C NULL, que se define como 0. Por lo tanto, la etiqueta de tipo también era cero indicando objeto, aunque no es un objeto. Solo un caso especial olvidado en tipo de letra que se deslizó antes de que alguien pudiera arreglarlo.

Todo es un objeto.