Compartilhar via


Copiando, passando e comparar dados

A maneira como o JScript copia, passa e compara dados depende de como os dados são armazenados, que por sua vez, depende do tipo de dados. JScript armazena dados por valor ou por referência.

Por valor vs.Por referência

JScript copia passa e compara os números e valores booleanos (true e false) pelo valor de. Esse processo aloca um espaço na memória do computador e o valor do original será copiado para ele. Alterações no original não afetam a cópia (e vice-versa) porque os dois são entidades separadas. Dois números ou valores booleanos são considerados iguais se eles tiverem o mesmo valor.

JScript copia, passa e compara objetos, matrizes e funções por referência. Basicamente, esse processo cria uma referência ao item original e usa a referência como se fosse uma cópia. Alterações no original alteram o original e a cópia (e vice-versa). Na verdade, há apenas uma entidade; a cópia é apenas outra referência aos dados.

Para comparar referência com êxito, as duas variáveis devem se referir a mesma entidade. Por exemplo, dois distintos Array sempre irá comparar objetos como desiguais, mesmo se eles contêm os mesmos elementos. Uma das variáveis deve ser uma referência a um para a comparação seja bem-sucedida. Para verificar se as duas matrizes mantêm os mesmos elementos, comparar os resultados da ToString () método.

Finalmente, o JScript copia e passa as seqüências de caracteres por referência. Ou não as seqüências de caracteres são objetos determina como as cadeias de caracteres são comparadas. Dois String objetos (criado com nova cadeia de caracteres("algo")) são comparados por referência. Se uma (ou ambas) das seqüências de caracteres é um valor de seqüência de caracteres literal ou primitivo, eles são comparados por valor. Para obter mais informações, consulte Igualdade e atribuições de JScript.

ObservaçãoObservação

Os conjuntos de caracteres ASCII e ANSI são construídos de forma que as letras maiúsculas precedem os minúsculos aqueles na ordem de seqüência. Por exemplo, "Zoo" compara como menos que "aardvark". Você pode chamar ToUpperCase () ou toLowerCase () em ambas as seqüências de caracteres, se você deseja realizar uma correspondência de maiúsculas e minúsculas.

Parâmetros da função

JScript passa um parâmetro para uma função por valor, faz uma cópia separada do parâmetro que existe apenas dentro da função. Apesar de matrizes e objetos são passados por referência, se um novo valor na função substitui-los diretamente, o novo valor não é refletido fora da função. Somente as alterações para propriedades de objetos ou elementos de arrays, são visíveis fora da função.

Por exemplo, o programa a seguir possui duas funções. A primeira função substitui o parâmetro de entrada, o que impede que ainda mais as alterações para o parâmetro que afetam o argumento de entrada original. A segunda função altera a propriedade do objeto sem substituir o objeto.

function clobber(param) {
   // Overwrite the parameter; this will not be seen in the calling code
   param = new Object();
   param.message = "This will not work.";
}

function update(param) {
    // Modify the property of the object; this will be seen in the calling code.
    param.message = "I was changed.";
}

// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";

// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);

// Call update, and print obj.message.
update(obj);
print(obj.message);

A saída desse código é:

This is the original.
I was changed.

Comparação de dados

JScript pode comparar os dados por valor ou por referência. Para executar um teste por valor, o JScript compara dois itens distintos para determinar se são iguais entre si. Normalmente, essa comparação é executada em uma base byte por byte. Quando ele testa por referência, ele verifica se os dois itens de referem para o mesmo item. Se o fizerem, então eles comparam como iguais; Caso contrário, embora eles possam conter os mesmos valores exatos, byte por byte, eles comparam tão desiguais.

Seqüências de caracteres podem ser comparadas por valor ou referência, dependendo se são ou não as seqüências de objetos. Se ambas as seqüências de caracteres são String objetos, as cadeias são comparadas por referência; Caso contrário, eles são comparados por valor. Isso permite que duas cadeias de caracteres sejam comparados como iguais, se cada um foi criada separadamente da outra, mas cada um tem o mesmo conteúdo. Para comparar os valores de dois String objetos, primeiro converta os objetos para cadeias de caracteres não-objeto com o toString ou valueOf métodos e em seguida, comparar seqüências de caracteres resultante. Para obter mais informações, consulte Igualdade e atribuições de JScript.

Consulte também

Conceitos

Igualdade e atribuições de JScript

Resumo do tipo de dados

Outros recursos

Tour da linguagem de JScript

Funções de JScript