¿Por qué typeof devuelve object cuando se usa con null? Según tengo entendido, esta es una propiedad de nivel superior del objeto global. Las referencias a la documentación oficial serían de gran ayuda.

1
Robert Rocha 2 sep. 2014 a las 20:53

3 respuestas

La mejor respuesta

En la primera implementación de JavaScript, los valores de JavaScript se representaban como una etiqueta de tipo y un valor. La etiqueta de tipo para los objetos era 0. null se representaba como el puntero NULL (0x00 en la mayoría de las plataformas). En consecuencia, nulo tenía 0 como etiqueta de tipo, de ahí el tipo falso de valor de retorno. (referencia)

Se propuso una solución para ECMAScript (a través de una suscripción), pero se rechazó. Habría resultado en typeof null === 'null'.

Referencia:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

2
Carlos Calla 2 sep. 2014 a las 16:56

Porque la especificación lo dice:

Table 20 — typeof Operator Results

 Type of val     Result
---------------------------
  Undefined    "undefined"
  Null         "object"
  Boolean      "boolean"
  Number       "number"
  String       "string"
  ...

Y también dice:

4.3.11 valor nulo

valor primitivo que representa la ausencia intencional de cualquier valor de objeto

Sin embargo, null todavía es de tipo de datos nulo y puede usar null donde puede usar otros objetos (por ejemplo, acceder a una propiedad en null arroja un error en su lugar de regresar undefined (para bien o para mal)).

Según tengo entendido, esta es una propiedad de nivel superior del objeto global.

No, null es literal , al igual que 5 es un número literal. undefined por otro lado es una variable global (como si ya no fuera lo suficientemente confuso).

2
Felix Kling 2 sep. 2014 a las 17:05

Es . En Javascript null es un object

Kiro Risk dice

El razonamiento detrás de esto es que nulo, en contraste con indefinido, se usaba (y aún se usa) a menudo donde aparecen los objetos. En otras palabras, nulo se usa a menudo para significar una referencia vacía a un objeto. Cuando Brendan Eich creó JavaScript, siguió el mismo paradigma, y tenía sentido (posiblemente) devolver "objeto". De hecho, la especificación ECMAScript define nulo como el valor primitivo que representa la ausencia intencional de cualquier valor de objeto (ECMA-262, 11.4.11).

1
Amit Joki 2 sep. 2014 a las 16:56