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:
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 conundefined
, 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 definenull
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
.