Valores primitivos e referências ECMAScript

No ECMAScript, as variáveis podem ter dois tipos de valores, ou seja, valores primitivos e valores de referência.

Valores primitivos e valores de referência

No ECMAScript, as variáveis podem ter dois tipos de valores, ou seja, valores primitivos e valores de referência.

Valores primitivos
Seções de dados simples armazenadas na pilha (stack), ou seja, seus valores são armazenados diretamente no local de acesso das variáveis.
Valores de referência
Objetos armazenados na pilha (heap), ou seja, o valor armazenado no local da variável é um ponteiro (point), que aponta para o local de armazenamento do objeto na pilha.

Ao atribuir valores a variáveis, o interpretador do ECMAScript deve determinar se o valor é um tipo primitivo ou um tipo de referência. Para fazer isso, o interpretador precisa tentar determinarSe o valor é um dos tipos primitivos do ECMAScriptou seja, Undefined, Null, Boolean, Number e String. Devido ao espaço fixo ocupado por esses tipos primitivos, podem ser armazenados em uma área de memória menor - a pilha. Assim, a armazenagem facilita a busca rápida dos valores das variáveis.

Em muitos idiomas, as strings são vistas como tipos de referência, não tipos primitivos, pois o comprimento das strings é variável. O ECMAScript quebrou essa tradição.

Se um valor for de tipo de referência, seu espaço de armazenamento será alocado na pilha (heap). Devido ao tamanho variável dos valores de referência, não pode ser colocado na pilha, pois isso reduziria a velocidade de busca das variáveis. Em vez disso, o valor armazenado no espaço de pilha da variável é o endereço de armazenamento do objeto na pilha. O tamanho do endereço é fixo, então não há impacto negativo no desempenho da variável ao armazená-lo na pilha. Como mostrado na figura a seguir:

Valores e referências originais armazenados em pilhas e pilhas

Tipos primitivos

Como mencionado anteriormente, o ECMAScript possui 5 tipos primitivos (primitive type), ou seja, Undefined, Null, Boolean, Number e String. O ECMA-262 define o termoTipo (type)Definido como um conjunto de valores, cada tipo primitivo define o intervalo de valores que ele contém e a forma literal de representação desses valores.

O ECMAScript oferece o operador typeof para determinar se um valor está dentro de um determinado tipo. Pode-se usar esse operador para determinar se um valor representa um tipo primitivo: se for um tipo primitivo, ainda pode-se determinar qual tipo primitivo ele representa.

Em capítulos posteriores, explicaremos em profundidade os tipos primitivos e de referência do ECMAScript para você.