Meu resumo de uma frase: o valor original não alterará o valor original, independentemente de ser uma atribuição variável ou um passe de função. Seja uma atribuição de variável ou um passe de função, se a nova variável for transferida, ela não afetará o valor de referência original. Se a nova variável for uma operação direta, afetará o valor de referência original.
Primeiro de tudo, fica claro que valores e tipos são dois conceitos diferentes. Por exemplo, NULL é o valor exclusivo do tipo nulo, indefinido é o valor exclusivo do tipo indefinido, e verdadeiro e falso são os únicos dois valores do tipo booleano, etc. Em qualquer idioma, a operação do valor pode ser resumida nos três aspectos a seguir.
Valor da cópia: ou seja, atribua o valor a uma nova variável ou atribua o valor a outra variável, atributo ou elemento de matriz através da variável.
Valor de passagem: isto é, passando o valor como um parâmetro para uma função ou método.
Compare valores: ou seja, compare o valor com outro valor para ver se é igual.
Como os valores dos dados do tipo de valor e os dados de referência têm formas diferentes, os métodos de operação -os naturalmente e os resultados produzidos também são diferentes. Observe que quando o valor é dados do tipo valor, geralmente o chamamos de valor original ou valor básico; Quando o valor é referenciado dados, geralmente o chamamos de valor referenciado ou valor composto.
1. Use valores originais
Para o valor original, os três níveis de sua operação são explicados da seguinte forma.
1) Copie o valor
Na declaração de atribuição, o processo de operação produzirá uma cópia do valor real. Não há conexão entre o valor da cópia e o valor real. Eles estão localizados em diferentes áreas de pilha ou em áreas de pilha sozinhas. Esta cópia pode armazenar variáveis, propriedades dos objetos e elementos de matriz. Por exemplo:
var n = 123, a, b = [], c = {}; a = n; // copie o número 123 b [0] = n; // copie o número 123 cx = n; // copie o número 123 (a == b [0]) && (a == cx) && (b [0] == cx) && alert ("os valores copiados são iguais"); // Detecção de que seus valores são iguaisNo exemplo acima, o valor 123 é copiado 3 cópias para a variável A, Matriz B e Objeto C, respectivamente. Embora seus valores sejam iguais, eles são independentes um do outro.
2) Passe o valor
Ao passar um valor para uma função ou método, o valor passado é apenas uma cópia, não o próprio valor. Por exemplo, se você modificar o valor passado em uma função, o resultado poderá afetar apenas a cópia desse valor de parâmetro e não afetará o valor original.
var a = 123; // a função de valor original f (x) {x = x + x; } f (a); // Chame a função para modificar o alerta de valor aprovado (a); // Verifique se o valor da variável A é afetado. O valor de retorno é 123, indicando que não há mudança3) Valor de comparação
No exemplo acima, também podemos ver que, ao comparar os valores originais, uma comparação de byte-bytes é realizada para determinar se são iguais. Comparando os próprios valores, não o local onde estão os valores. Embora os resultados da comparação possam ser iguais, isso significa apenas que as informações de bytes que eles contêm são as mesmas.
2. Use valores de referência
Para valores de referência, os três níveis de suas operações são explicados da seguinte forma.
1) Copie o valor
Na declaração de atribuição, o valor atribuído é uma referência ao valor original, não à cópia do valor original, nem ao próprio valor original. Ou seja, após a execução da tarefa, a variável salva referências ao valor original (ou seja, o endereço de armazenamento do valor original). Quando copiados entre várias variáveis, elementos de matriz ou propriedades de objeto, todas elas serão as mesmas que as referências salvas pela variável original.
Todas as referências têm o mesmo efeito e função e podem ser executadas. Se os dados forem editados através de uma das referências, essa modificação será refletida no valor original e em outras referências relacionadas. Por exemplo:
var a = [1,2,3]; // atribui referência de matriz b = a; // Cópia do valor b [0] = 4; // modifica o valor do primeiro elemento no alerta B variável (a [0]); // retorna 4, exibindo que o valor do primeiro elemento na variável A também é modificado para 4
No entanto, se um novo valor for transferido para a variável b, o novo valor não afetará o conteúdo do valor original. Por exemplo:
var a = [1,2,3]; // atribui referência de matriz b = a; // Cópia do valor b = 4; // substituir o alerta de atribuição (a [0]); // o conteúdo da variável A permanece inalterado
As atribuições repetidas estão realmente substituindo a referência de uma variável ao valor original, tornando -se uma cópia de outro valor ou uma referência a ele. Portanto, não afetará o valor original e o diagrama de demonstração é mostrado na Figura 4-2.
2) Passe o valor
Quando uma referência é usada para passar dados para uma função, a função passada para a função também é uma referência ao valor original. A função pode usar essa referência para modificar o próprio valor original e qualquer modificação é visível fora da função. Por exemplo:
var a = [1,2,3]; função f (x) {x [0] = 4; // modifica o valor do parâmetro na função} f (a); // Passe o alerta de valor de referência (a [0]); // retorna 4, o valor original mudaObserve que o que é modificado dentro da função é uma referência a um objeto ou matriz externo, não o valor do objeto ou matriz. Você pode usar uma referência para modificar os atributos de um objeto ou os elementos de uma matriz dentro da função, mas se uma nova referência for usada dentro da função para substituir a referência original, a modificação dentro da função não afetará o valor da referência original e não pode ser vista fora da função.
var a = [1,2,3]; função f (x) {x = 4; // modifica o valor do parâmetro na função} f (a); // Passe o alerta de valor de referência (a [0]); // retornar 1, o valor original não vai mudar3) Valor de comparação
Ao comparar dois valores de referência, os dois endereços de referência são comparados para ver se os valores originais que eles referenciam são a mesma cópia, e não se seus valores originais são iguais. Ao referenciar dois valores diferentes, embora tenham a mesma composição de bytes, os valores das duas referências não são iguais.
var a = novo número (1); // Valor de referência a var b = novo número (1); // Valor de referência b var c = a; // atribui uma referência ao alerta C (a == b); // retorna alerta falso (a == c); // retorna verdadeiro
Então, {} == {}, [] == [], todos retornam false. Porque o endereço de referência é diferente.
Em resumo, para qualquer idioma, o uso de valores e o uso de referências são dois métodos básicos de manipulação de dados. Quando operamos dados, qual método deve ser usado para processá -lo principalmente depende do tipo de dados. O tipo de valor e os dados de referência participam das operações são diferentes. Os dados do tipo de valor operam em dados usando valores, enquanto os dados de referência operam em dados usando referências. Diferentes métodos de cálculo também produzem resultados diferentes naturalmente. Vamos dar uma olhada em outro exemplo:
var s = "abc"; // string, Dados do tipo de valor var o = nova (s) string (s); // objeto string, função de string em caixa f (v) {// função de operação v.toString = function () {// Método ToString ToString () return 123; }; } f (s); // Passe o (s) alerta (s) do valor; // retorna a string "ABC", indicando que a operação não afetou os dados originais f (o); // Passe o alerta de referência (O); // retorna o valor 123, indicando que a operação afetou a estrutura interna dos dados originaisO tipo de valor participa da operação com o valor real, portanto não possui conexão direta com os dados originais. O tipo de referência participa da operação com o endereço de referência e o resultado do cálculo afetará o bloco de dados da área de heap associado ao endereço de referência. No entanto, há uma exceção. Para seqüências de javascript, seus métodos de operação são relativamente complicados. Por favor, pesquise no Google para obter detalhes!
O artigo acima JavaScript Data Operation_a Breve discussão sobre a essência da operação de valores originais e valores de referência é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.