Javascript, lo básico

Esto es una recopilación de apuntes personales sobre cosas de Javascript. Espero que a alguien le pueda ser útil también.

Objetos

Todo lo que no sea un número (Number), una cadena de texto (String), un boolean (Boolean), un símbolo (Symbol), null o Undefined es un objeto en Javascript.

Esto quiere decir que las funciones (Function), los fechas (Date), las expresiones regulares (RegExp) y los array (Array) son un tipo especial de objeto.

La mejor forma de definir objetos es en forma literal (literal syntax):

var o = {};

var person = {
    name: "Jonathan",
    lastName: "Alvarez",
        likes : {
        play: "Zelda, Pokemon"
    }
};

La razón de esto es porque:

1. Es fácil de entender. 2. Es rápido de escribir. 3. Es la sintaxys usada por JSON por lo que deberá preferirse siempre.

Para acceder a las propiedades de un objeto:

person.name;
person["name"]; //Forma preferida

La segunda es la forma preferida ya que no interferirá con el uso de palabras reservadas del lenguaje, pues siempre irá entre comillas dobles o simples.

Array

Funcionan como un objeto salvo por dos cosas:

  • Solo pueden ser accedidos utilizando valores númericos, correspondientes al índice, entre llaves [].
  • Poseen la propiedad length.

Ejemplo de sintaxis:

var ciudades = ["Pereira", "Manizales", "Medellín"];
ciudades[1]; // Manizales.
ciudades.length; // 3

No es recomendado dejar una coma al final de los valores del array ya que en algunos browsers puede crear un nuevo índice con valor undefined.

Se debe tener en cuenta que el valor de la propiedad length es el valor del índice mas alto más uno; y no el tamaño del array en sí. Esto es:

var a = ["apple", "onion", "coconaut"];
a.length; // 3

a[120] = "orange";
a.length; // 121

Interesante, no?

Un error común al utilizar variables es calcular el tamaño en cada iteración de un ciclo o loop:

for(var i = 0; i < a.length; a++;) {
    // Do something
}

Una forma más óptima sería

for(var i = 0, len = a.length; i < len; a++;) {
    // Do something
}

Y una forma más bonita:

for (var i = 0, item; item = a[i++];) {
    // Do something
}

Esta última recorrerá el array hasta toparse con una sentencia falsa como undefined. Así que si hay un valor en el array separado por undefined, nunca se llegará a este valor de esa forma.

Y la forma preferida que no fallará como la anterior sería:

for( var fruit in a ) {
    // Do something
}

Array Map

La propiedad Array.prototype.map de los arrays permite recorrerlos también. Por su facilidad, ante un for, esta forma es proferible.

Siguiendo con el ejemplo del array a

a.map(function(element, index) {
    console.log(element)
}

Referencia: MDN