Compartir a través de


Copiar, pasar y comparar datos

El modo en que JScript copia, pasa y compara datos depende de cómo se almacenen los datos, lo que, a su vez, depende del tipo de datos. JScript almacena los datos por valor o por referencia.

Por valor opor referencia

JScript copia, pasa y compara números y valores Boolean (true y false) por valor. Este proceso asigna un espacio en la memoria del equipo y copia en él el valor del original. Los cambios en el original no afectan a la copia (y viceversa), porque son entidades independientes. Dos números o valores Boolean se consideran equivalentes si tienen el mismo valor.

JScript copia, pasa y compara los objetos, matrices y funciones por referencia. Básicamente, este proceso crea una referencia al elemento original y la utiliza como si fuera una copia. Los cambios en el original afectan tanto al original como a su copia (y viceversa). En realidad, sólo hay una entidad; la copia es sólo otra referencia a los datos.

Para que la comparación por referencia sea correcta, las dos variables deben hacer referencia exactamente a la misma entidad. Por ejemplo, el resultado de una comparación entre dos objetos Array siempre será diferente, aunque contengan los mismos elementos. Para que la comparación se realice correctamente, una de las variables debe ser una referencia a la otra. Para comprobar si los dos objetos Array contienen los mismos elementos, compare los resultados del método toString().

Por último, JScript copia y pasa cadenas por referencia. El modo en que se comparan las cadenas depende de si éstas son o no son objetos. Dos objetos String (creados con new String("cualquier cosa")) se comparan por referencia. Si una o las dos cadenas son literales o valores de cadena primitivos, se comparan por valor. Para obtener más información, vea Asignaciones e igualdad en JScript.

Nota

Los juegos de caracteres ASCII y ANSI se crean de modo que las letras mayúsculas preceden a las letras minúsculas en orden de secuencia. Por ejemplo, "Zoo" es menor que "alianza". Puede llamar a toUpperCase() o toLowerCase() en ambas cadenas si desea realizar una comparación en la que no se distingan mayúsculas y minúsculas.

Parámetros de función

Cuando JScript pasa un parámetro a una función por valor, realiza una copia independiente del parámetro que sólo existe dentro de la función. Aunque los objetos y matrices se pasen por referencia, si se sobrescriben directamente con un nuevo valor en la función, el nuevo valor no se reflejará fuera de la función. Sólo los cambios en las propiedades de los objetos o de los elementos de las matrices son visibles fuera de la función.

Por ejemplo, el programa siguiente tiene dos funciones. La primera función sobrescribe el parámetro de entrada, que impide que los cambios realizados en el parámetro afecten al argumento de entrada original. La segunda función cambia la propiedad del objeto sin sobrescribirlo.

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);

El resultado de este código es:

This is the original.
I was changed.

Comparación de datos

JScript puede comparar datos por valor o por referencia. Para realizar una comprobación por valor, JScript compara dos elementos distintos para determinar si son iguales. Normalmente, esta comparación se realiza byte a byte. Cuando la comprobación se realiza por referencia, lo que se comprueba es si los dos elementos hacen referencia al mismo elemento. Si es así, se comparan como elementos iguales; si no, aunque contengan exactamente los mismos valores, byte a byte, no se comparan como elementos iguales.

Las cadenas se pueden comparar por valor o por referencia, dependiendo de si son o no son objetos. Si ambas cadenas son objetos String, se comparan por referencia; de lo contrario, se comparan por valor. Esto permite que dos cadenas se comparen como elementos iguales si se crearon independientemente una de otra, pero tienen el mismo contenido. Para comparar los valores de dos objetos String, primero hay que convertir los objetos en cadenas no de objeto con los métodos toString o valueOf y después comparar las cadenas resultantes. Para obtener más información, vea Asignaciones e igualdad en JScript.

Vea también

Conceptos

Asignaciones e igualdad en JScript

Resumen de tipos de datos

Otros recursos

Paseo por el lenguaje JScript

Funciones de JScript