Valores primitivos imutáveis ​​e Referências de objetos mutáveis

jsjsjs

Há uma diferença fundamental em JavaScript entre os primitivos valores (indefinidos, nulos, booleanos, números e strings) e objetos (incluindo matrizes e funções). Os primitivos são imutáveis: não há como alterar (ou “transformar”) um valor primitivo. Isso é óbvio para números e booleanos - nem mesmo faz sentido mudar o valor de um número. Não é tão óbvio para strings, entretanto. Uma vez que as strings são como arrays de caracteres, você pode esperar ser capaz para alterar o caractere em qualquer índice especificado. Na verdade, JavaScript não permite isso e todos os métodos de string que parecem retornar uma string modificada estão, na verdade, retornando um novo valor de string. Por exemplo:

mvsi-1

Os primitivos também são comparados por valor: dois valores são iguais apenas se eles têm o mesmo valor. Isso soa redundante para números, booleanos, nulo e indefinido: não há outra maneira que eles possam ser comparados. Novamente, entretanto, não é tão óbvio para as strings. Se dois valores de string distintos são comparados, JavaScript os trata como iguais se, e somente se, eles têm o mesmo comprimento e se o caractere em cada índice o mesmo.

Os objetos são diferentes dos primitivos. Primeiro, eles são mutáveis ​​- os seus valores podem mudar:

mvsi-2

Objetos não são comparados por valor: dois objetos distintos não são iguais mesmo que tenham as mesmas propriedades e valores. E dois arrays distintos não são iguais, mesmo que tenham os mesmos elementos no mesmo pedido:

mvsi-3

Os objetos às vezes são chamados de tipos de referência para distingui-los de Tipos primitivos do JavaScript. Usando esta terminologia, os valores dos objetos são referências, e dizemos que os objetos são comparados por referência: pois os valores dos objetos são os mesmos se e somente se eles se referem ao mesmo objeto subjacente.

mvsi-4

Como você pode ver neste código, atribuir um objeto (ou array) a um variável simplesmente atribui a referência: não cria uma nova cópia de o objeto. Se você quiser fazer uma nova cópia de um objeto ou array, você deve copiar explicitamente as propriedades do objeto ou os elementos da variável.

mvsi-5

Da mesma forma, se quisermos comparar dois objetos ou matrizes distintas, deve comparar suas propriedades ou elementos. Este código define uma função para comparar dois arrays:

mvsi-6

Lista de Posts