Hasta donde sé, los objetos pueden ser de cualquier tamaño, por lo que nunca se sabe qué tan grande será un objeto. Por lo tanto, se implementó como un tipo de referencia. A diferencia de cualquier tipo primitivo cuyo tamaño conoces de antemano. Eso es lo que dice este artículo . Pero cadenas... de otro artículo:
Cadena: un conjunto de "elementos" de valores enteros sin signo de 16 bits. Debido a que la cadena no es un valor fijo, la variable asignada a una cadena no contiene la cadena sino la referencia a ella.
Pero, ¿cómo es entonces una cadena de un tipo primitivo?
Ese libro que estás leyendo es raro.
Un tipo primitivo tiene un tamaño fijo en la memoria. Por ejemplo, un número ocupa ocho bytes de memoria y un valor booleano se puede representar con solo un bit. El tipo de número es el más grande de los tipos primitivos. Si cada variable de JavaScript reserva ocho bytes de memoria, la variable puede contener directamente cualquier valor primitivo.
Sin embargo, los tipos de referencia son otra cuestión. Los objetos, por ejemplo, pueden tener cualquier longitud, no tienen un tamaño fijo. Lo mismo ocurre con los arreglos: un arreglo puede tener cualquier número de elementos. De manera similar, una función puede contener cualquier cantidad de código JavaScript. Dado que estos tipos no tienen un tamaño fijo, sus valores no se pueden almacenar directamente en los ocho bytes de memoria asociados a cada variable. En cambio, la variable almacena una referencia al valor. Normalmente, esta referencia es algún tipo de puntero o dirección de memoria. No es el valor de los datos en sí mismo, pero le dice a la variable dónde buscar para encontrar el valor.
Y luego el autor continúa explicando cómo esto causa un comportamiento diferente, como si fuera un efecto del diseño de la memoria. Pero lo entendieron al revés. La distinción debe ser:
Eso (y "las matrices y funciones son objetos") es la esencia del modelo de valor de JavaScript. Cómo se implementa esto realmente no importa; de hecho, difiere de un motor a otro.
Ahora, cuando pregunta " ¿Por qué la cadena es un primitivo? ", La respuesta es "porque las cadenas son valores inmutables y no tienen propiedades".