Mostrando postagens com marcador referencia memoria javascript. Mostrar todas as postagens
Mostrando postagens com marcador referencia memoria javascript. Mostrar todas as postagens

segunda-feira, 5 de novembro de 2012

Valores Complexos | JavaScript

  1. var arr1 = arr2 = [ ];
  2. arr1.push( 5 );
  3. console.log( arr2 );
No exemplo acima o log daria o output "[5]", isso porque ao alterar o Array arr1 o Array arr2 também é alterado. O mesmo vale para objetos:
  1. var obj1 = {}; 
  2. var obj2 = obj1;
  3. obj1.man = "Man!!!";
  4. console.log( obj2.man );
O output no console seria a mensagem "Man!!!".

Curioso pra saber porque isso ocorre? DON'T PANIC!

Primeiro de tudo, você deve entender como JavaScript armazena os valores das variáveis.
O Array e o Objeto diferem dos outros tipos por serem tratados como valores complexos ( WHAT?! ) e o que ocorre quando eu faço var arr1 = arr2 = [ ]; é que eu não estou copiando o valor de arr1 em arr2 e sim copiando para arr2 a referência da memória arr1, e assim ocorre com todos os demais valores complexos em JS. Então entenda: Valores complexos são armazenados e manipulados por referência de memória.

Os outros tipos, os primitivos, - Number, String, Boolean - são armazenados/copiados por valor mesmo. Nos próximos posts eu vou continuar explicando melhor como isso funciona :D

Espero que tenha entendido, qualquer dúvida ou sugestão será bem-vinda nos comentários.

domingo, 10 de junho de 2012

Valores Complexos - JavaScript

var arr1 = arr2 = [ ];
arr1.push( 5 );
console.log( arr2 );
No exemplo acima o log daria o output "[5]", isso porque ao alterar o Array arr1 o Array arr2 também é alterado. O mesmo vale para objetos:

var obj1 = {}; 
var obj2 = obj1;
obj1.man = "Man!!!";
console.log( obj2.man );

O output no console seria a mensagem "Man!!!".
Curioso pra saber porque isso ocorre?
Primeiro de tudo, você deve entender como JavaScript armazena os valores das variáveis.


O Array e o Objeto diferem dos outros tipos por serem tratados como valores complexos e o que ocorre quando eu faço var arr1 = arr2 = [ ]; é que eu não estou copiando o valor de arr1 em arr2 e sim copiando para arr2 a referência da memória arr1, e assim ocorre com todos os demais valores complexos em JS. Então entenda: Valores complexos são armazenados e manipulados por referência.

Os outros tipos, os primitivos, - Number, String, Boolean - são armazenados/copiados por valor.

Espero que tenha entendido, qualquer dúvida ou sugestão será bem-vinda nos comentários.