Errores comunes en Javascript y algunos tips — Parte 1.

John Cardenas
Laboratoria Developers
2 min readFeb 28, 2017

A pesar que muchos desarrolladores tienen años haciendo javascript, olvidan ciertas cosas peculiares del lenguaje.

Error 1 :
Que crees que imprimiría el console.log, del siguiente bloque de código.

function modifica( arr ){
arr[0] = 'hola';
}
var arreglo = [ 1, 2, 3 ];
var otroArreglo = arreglo;
modifica( otroArreglo );
console.log( arreglo[0] );

Esta porción de código imprime "hola" , a pesar que asignamos "arreglo" a una nueva variable "otroArreglo". En Javascript los tipos primitivos son pasados por valor y los Objects son pasados como una copia de su referencia.

Entonces si tu cambias el valor de uno de sus elementos, este cambio se reflejará en el original.

Si quieres pasar una copia y no modificar el original podrías usar :

var otroArreglo = arreglo.slice();

Esto hace un shallow copy del arreglo original, ya que el método slice retorna un nuevo arreglo.

Error 2:

Según lo explicado en líneas anteriores, que imprimiría el siguiente código:

function modifica( arr ){
arr = [];
}
var arreglo = [ 1, 2, 3 ];
var otroArreglo = arreglo;
modifica( otroArreglo );
console.log( arreglo );

Probablemente pienses que imprime "[]" ya que la función modifica el valor del arreglo a "[]". Lamentablemente esa no es la respuesta. El programa imprimiría : [ 1, 2, 3 ]. El arreglo es pasado a la función como una copia de su referencia, pero la referencia en sí es pasada por valor. Por lo tanto no puedes sobre-escribir la referencia.

Tip 1 : Old tip — Etiquetas en loops.

Sabías que puedes etiquetar los bucles para luego hacer uso del continue o break apuntando a ese bucle?

Que crees que imprimiría el siguiente código? Ejecútalo y analízalo :)

primerLoop:
for ( var i = 0; i < 3; i++ ){
for ( var j = 0; j < 3; j++ ){
console.log( i, j );
if ( i == 1 ){
break primerLoop;
}
}
}

Tip 2: Shorcuts para algunas de las operaciones mas comunes que veo en muchos(as) coders.

//#1
var n = 2;
var stringN = n.toString();
// shorcut:
var shortStringN = n + '';
//#2
var c = "hola".charAt(0); //h
var shortC = "hola"[0];
//#3
var a = false;
var b = false;
var c = false;
//short:
var a = b = c = false;
//#4
function doSomething(){
console.log("doSomething");
}
var a = 19;
if ( a >= 18 ){
doSomething();
}
//short:
a >= 18 && doSomething();
// Bit manipulation, Esto podría ser otro post :) es un tema largo..var n = 2.3;
var entero = Math.floor(2.3);
//short ( considerar que esto es para 32-bits ), en caso de //desconocer el tamaño del número es mejor usar Math.floorvar entero = n | 0;
var entero = ~~n;

Bueno esto sería todo para una primera parte!

--

--