Blog

Referencias en JavaScript

Mar 02, 2009 | Español | By Crysfel | 10 Comments | Read in English

Una referencia es un puntero al lugar exacto donde se encuentra un objeto, en JavaScript este es un concepto fundamental que debemos conocer y dominar.

Referencias en JavaScript
Author: Crysfel

I'm a software developer with 6+ years of experience, when I'm not developing software I may be writing a tutorial, you can follow me on twitter

Definición

Físicamente los objetos están alojados en la memoria y accedemos a ellos mediante una referencia, la cual esta contenida en una variable. Múltiples variables pueden hacer referencia al mismo objeto, a su vez este objeto puede contener referencias a otros objetos como por ejemplo strings, numbers, arrays, etc.

Cuando múltiples variables apuntan a un mismo objeto y éste es modificado, el cambio se reflejará en todas las variables que están haciendo referencia al objeto. Un ejemplo de esto es lo siguiente:

//Se crea un objeto vacío
var obj = {};

//Se crea una referencia
var reference = obj;

//Se agrega una propiedad al objeto original
obj.property = 1;

//La referencia puede acceder a la propiedad recién creada
console.debug('reference.property = '+reference.property);

El mismo principio se aplica para los arreglos, aunque estos se modifican a si mismos mediante el método “push” las referencias se verán afectadas. Analicemos el ejemplo siguiente:

var array = ['Ext JS','Mootools','jQuery'];
var ref = array;

array.push('prototype');

console.debug(ref.length == array.length);
console.debug(ref);

Referencias sólo a objetos

Es importante mencionar que en JavaScript las referencias sólo apuntan a objetos en memoria y no a otras referencias como el lenguaje C/C++. En el siguiente ejemplo se muestra este comportamiento:

//Se crea el objeto original
var obj1 = {property:'Original value'};
//Se hace una referencia al objeto original
var ref1 = obj1;

//obj1 apunta a un Nuevo objeto
obj1 = {property:'New Object!'};

//Ref1 apunta al objeto original, por lo tanto son diferentes
console.debug('same object = '+(obj1.property == ref1.property));
console.debug(obj1.property);
console.debug(ref1.property);

Concatenación

Los strings también son objetos y hacemos referencia a estos mediante una variable; es importante recordar que cuando se concatena uno o más strings siempre resulta un nuevo objeto. En el siguiente ejemplo se muestra que al concatenar un texto se crea un nuevo string y por lo tanto la referencia queda apuntando al string original.

var str = 'Hello world!';
var refStr = str;

str += ' this is Crysfel';
console.debug('same string = '+(str === refStr));

Si tienen alguna duda o sugerencia sobre este tema de referencias, pueden hacer preguntas en los comentarios, con gusto las responderé.

10 Responses to “Referencias en JavaScript”

  • Carlos Apr 12, 2009

    muy bueno tus tutoriales sigue asi ojala sigas poniendo los demas temas que faltan saludos

  • Lestat Apr 13, 2009

    Gracias por las lecciones

    saludos

  • Franco May 01, 2009

    hola una correccion en el video muestra que declaras en la primera linea una objeto
    var obj = new Object();
    pero en el texto de la pagina esta como
    var obj = {};
    Saludos
    Franco

    • Crysfel May 03, 2009

      Así es, realmente no importa como la manera como se declare, es exactamente lo mismo, cuestión de gustos.

  • spit Jul 20, 2009

    Sigo el tuto… me esta gustado y es muy interesante…este capitulo es bastante importante porque yo estoy muy acostumbrado a programar en c++ lo cual me confunde mucho..un saludo.

  • Cristian Oct 19, 2009

    Buen detalle eso de las referencias.
    Me queda la duda si lo que se está haciendo al referencias es clonar el objeto.
    Si puedes responder y aclarármelo se lo agradecería mucho.
    Y aprovecho de felicitarte por el Tutorial que esta buenísimo.

    Saludos

    • Crysfel Oct 19, 2009

      Precizamente eso es lo que se evita al utilizar referencias, las dos variables apuntan a la misma dirección de memoria, por lo tanto las dos variables son la misma cosa, si modificas una la otra se ve modificada también.
      Saludos

  • ilen Nov 18, 2009

    PERO PARA que es la referencia?, es para cambiar el valor del objeto original… y esta a la vez en memoria?

    • Crysfel Nov 18, 2009

      Hola ilen.

      Este concepto lo debemos tener claro cuando escribimos código, ya que si no lo conocemos podríamos estar manipulando el mismo objeto sin saberlo y tendríamos errores “extraños”.

  • Claudio Madrid G. Mar 21, 2010

    Esto de la consola, no funciona en IE? hay alguna manera ?

Leave a Reply







Updates

RSS

Subscribe to our feeds to receive updates of our newest posts and free tutorials.

Site search

Maybe we have what you need, would you like to search first?

Donations

Would you buy me a cup of coffee? I am sharing my knowledge and time with you, help this project grow. Thank you!