tipos example estructura ejemplo datos array javascript primitive

example - typeof javascript ejemplo



¿por qué es typeof nulo "objeto"? (5)

Si null es una primitiva, ¿por qué typeof(null) devuelve " object "?

en resumen: es un error en ECMAScript, y el tipo debe ser null

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

Estoy leyendo ''Javascript Profesional para Desarrolladores Web'' Capítulo 4 y me dice que los cinco tipos de primitivos son: indefinido, nulo, booleano, número y cadena.

Si null es una primitiva, ¿por qué typeof(null) devuelve "object" ?

¿No querría eso decir que null se pasa por referencia (supongo que todos los objetos se pasan por referencia), por lo que NO es un primitivo?


Si null es una primitiva, ¿por qué typeof(null) devuelve "object" ?

Porque la especificación así lo dice .

11.4.3 El tipo de operador

La producción UnaryExpression : typeof UnaryExpression se evalúa de la siguiente manera:

  1. Deje que val sea ​​el resultado de evaluar UnaryExpression .
  2. Si Type ( val ) es Reference , entonces
    a. Si Reference ( val ) es verdadero , devuelve " undefined ".
    segundo. Deje que val sea GetValue ( val ).
  3. Devuelve una Cadena determinada por Type ( val ) de acuerdo con la Tabla 20.

Como se ha señalado, la especificación así lo dice. Pero dado que la implementación de JavaScript es anterior a la escritura de la especificación ECMAScript, y la especificación tuvo cuidado de no corregir las fallas de la implementación inicial, todavía hay una pregunta legítima sobre por qué se hizo de esta manera en primer lugar. Douglas Crockford lo llama un error . Kiro Risk piensa que, en cierto modo, tiene sentido :

El razonamiento detrás de esto es que null , en contraste con undefined , era (y aún es) usado a menudo donde aparecen los objetos. En otras palabras, null 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 (podría decirse) devolver "objeto". De hecho, la especificación ECMAScript define null como el valor primitivo que representa la ausencia intencional de cualquier valor de objeto (ECMA-262, 11.4.11).


Del libro YDKJS

Este es un error de larga data en JS, pero uno que probablemente nunca va a ser reparado. Demasiado código en la Web se basa en el error y, por lo tanto, solucionarlo provocaría muchos más errores.


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

typeof null === ''object''; // This stands since the beginning of JavaScript

Se propuso un "arreglo" para ECMAScript (a través de una opción de suscripción). Habría resultado en:

typeof null === ''null''

... pero este cambio fue rejected , debido a problemas con el código que usa esta "peculiaridad" específica para probar null .