JScript  

Copiar, pasar y comparar datos

En JScript, la forma en que se controlan los datos depende de su tipo.

Por valor o por referencia

Los valores numéricos o Boolean (true y false) se copian, pasan y comparan por valor. Al copiar o pasar por valor, se asigna un espacio en la memoria del equipo y se copia el valor del original en ese espacio. Si después cambia el original, la copia no se modifica (y viceversa), porque son entidades independientes.

Los objetos, matrices y funciones se copian, pasan y comparan por referencia. Al copiar o pasar por referencia, básicamente se crea un puntero al elemento original y se utiliza como si fuera una copia. Si cambia el original, modifica el original y la copia (y viceversa). En realidad, sólo hay una entidad; la "copia" realmente no es una copia, es sólo otra referencia a los datos.

Al comparar por referencia, ambas variables deben hacer referencia exactamente a la misma entidad para que la comparación se realice correctamente. 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, las cadenas se copian y pasan por referencia, pero se comparan por valor. Tenga en cuenta que dos objetos String, creados con new String("algo"), se compararán por referencia, pero si uno de los dos valores es un valor de cadena, se compararán por valor.

Nota   Debido a la forma en que se construyen los juegos de caracteres ASCII y ANSI, 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.

Pasar parámetros a funciones

Al pasar un parámetro a una función por valor, está haciendo una copia independiente del parámetro y sólo existe dentro de la función. Aunque los objetos y matrices se pasen por referencia, si los sobrescribe 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 (con el modelo de objetos de Internet Explorer):

// Esto sobrescribe su parámetro, por lo que el cambio
// no se refleja en el código de llamada.
function Sobrescribir(param) 
{
    // sobrescribir el parámetro; esto no se verá en 
    // el código de llamada
    param = new Object();
    param.message = "Esto no funcionará";
}

// Esta acción modifica una propiedad del parámetro, que
// puede verse en el código de llamada.
function Actualizar(param)
{
    // Modifica la propiedad del objeto; esto se verá en 
    // el código de llamada.
    param.message = "Me han cambiado";
}

// Crea un objeto y le asigna una propiedad.
var obj = new Object();
obj.message = "Este es el original";

// Llama a Sobrescribir e imprime obj.message. Observe que no ha cambiado.
Sobrescribir(obj);
window.alert(obj.message); // Todavía muestra "Este es el original".

// Llama a Actualizar e imprime obj.message. Observe que ha cambiado.
Actualizar(obj);
window.alert(obj.message); // Muestra "Me han cambiado".

Comprobar datos

Al realizar una comprobación por valor, se comparan dos elementos para establecer si son iguales. Normalmente, esta comparación se realiza byte por byte. Al comprobar por referencia, está determinando si dos elementos son punteros a un único elemento original. Si es así, el resultado es que son iguales; si no, aunque contengan los mismos valores exactos, byte por byte, el resultado es que no lo son.

Copiar y pasar cadenas por referencia ahorra memoria; pero como no puede cambiar cadenas una vez creadas, es posible compararlas por valor. Esto permite comprobar si dos cadenas tienen el mismo contenido aunque una se haya generado totalmente aparte de la otra.

Ayuda de Javascript y Vbscript para Javascripts.astalaweb.com.