====== JavaScript ======
* [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects|Referencia de los distintos objetos]].
===== Básico =====
==== Tipos de datos ====
=== Strings ===
Acciones:
* ''str1 + str2'', concatenar.
Propiedades:
* ''length'': Devuelve la longitud de la cadena.
Métodos:
* ''charAt(indice)'': Devuelve el carácter situado en la posición especificada por 'indice'.
* ''lastIndexOf(cadena_buscada, indice)'': Devuelve la posición de la última ocurrencia de 'cadena_buscada' dentro de la cadena actual, a partir de la posición dada por 'indice', y buscando hacia atrás. Este último argumento es opcional y, si se omite, la busqueda comienza por el último carácter de la cadena.
* ''split(separador)''; Parte la cadena en un array de caracteres. Si el carácter separador no se encuentra, devuelve un array con un sólo elemento que coincide con la cadena original.
* ''substring(primer_Indice,segundo_Indice)'': Devuelve la subcadena que comienza en la posición 'primer_Indice + 1' y que finaliza en la posición 'segundo_Indice'. Si 'primer_Indice' es mayor que 'segundo_Indice', empieza por 'segundo_Indice + 1' y termina en 'primer_Indice'. Si hacemos las cuentas a partir de 0, entonces es la cadena que comienza en 'primer_Indice' y termina en 'segundo_Indice - 1' (o bien 'segundo_Indice' y 'primer_Indice - 1' si el primero es mayor que el segundo).
* ''toLowerCase()'': Devuelve la cadena en minúsculas.
* ''toUpperCase()'': Devuelve la cadena en mayúsculas.
* Para el ''format'' mira los [[script:jssintaxissnippets|snippets]].
Parsear a:
* Int: ''parseInt''.
=== Arrays ===
Creación:
var x = new Array(); // x es un nuevo array
var x = new Array(5); // x es un nuevo array de 5 elementos
var x = [5]; // x es un nuevo array de 5 elementos
var x = new Array(); x[0] = "car"; // x es un nuevo array y se le ha asignado un valor
Añadir un elemento al final del array:
myArray[myArray.length] = someValue;
Saber si un elemento existe en el array:
function existsOnArray (value, array) {
return (array.indexOf(value) != -1);
}
Propiedades:
* ''length'', devuelve el tamaño del array.
Métodos:
* ''push'', añade uno o más elementos al final del array, devuelve el nuevo tamaño.ray.
* ''join'', une los elementos del array en un string a partir de un separador.
=== Arrays asociativos ===
new myArray = new Array();
myArray["abc"] = 200;
myArray["xyz"] = 300;
var myArray = { "abc":200, "xyz": 300};
alert(myArray["abc"]); // output: 200
for(key in myArray) {
alert("key " + key
+ " has value "
+ myArray[key]);
}
==== Bucles ====
* El foreach es...
for(key in object) {
if(object.hasOwnProperty(key) {
...then do something...
}
}
==== Condicionales ====
* Utiliza ''==='' y ''!=='' en vez de ''=='' ya que mejora el trabajo con elementos tipados.
===== Orientado a Objetos =====
Hay que tener en cuenta las dos siguientes frases al programar con JavaScript:
- Los objetos son diccionarios.
- Los métodos son objetos.
=== Diccionarios ===
Los objetos en JavaScript funcionan como pares de clave-valor, como si fuesen diccionarios.
var p = new Object();
p.x = 3;
p.y = 5;
message.innerHTML = p.x + "," + p.y;
Es lo mismo que:
var p = new Object();
p["x"] = 3;
p["y"] = 5;
message.innerHTML = p["x"] + "," + p.y;
=== Funciones como variables ===
El hecho que un método (o sea, una función) sea un objeto significa que puede ser asignada a una variable:
var p = new Object();
p["x"] = 3;
p.y = 5;
p["print"] = function() {
message.innerHTML = p.x + "," + p.y;
}
Otro ejemplo más claro de como asignar una funcion a un objeto:
function add(point) {
return point.x + point.y;
}
var myFunc = add
var p = { x: 1, y:1 };
var result = myFunc(p);
// Devolverá 2
alert(result);
=== Objetos literales ===
Existe otra forma de definir objetos en JavaScript (denominada literal), esta es directa y no requiere de declaración:
var p =
{
x : 5,
y : 3,
print : function() { message.innerHTML = p.x + ',' + p.y; }
}
p.print();
O...
var person =
{
name: "Scott Allen", createdDate: new Date()
website: "OdeToCode.com",
address: { state: "MD", postalCode: "21044" },
};
alert(person.address.state);
alert(person.createdDate);
=== Métodos de un objeto ===
var point1 =
{
x: 3,
y: 5,
add: function(otherPoint)
{
this.x = this.x + otherPoint.x;
this.y = this.y + otherPoint.y;
}
};
=== Constructores ===
function Point(x,y)
{
this.x = x;
this.y = y;
}
var p1 = new Point(3,5);
alert(p1.x, p1.y);
O lo siguiente también sería válido:
function Point(x,y)
{
this.x = x;
this.y = y;
this.add = function(point2)
{
this.x += point2.x;
this.y += point2.y;
}
}
var p1 = new Point(3,5);
===== Avanzado =====
==== Closures ====
Podemos crear una función parametrizando su código interno y devolviéndola para que luego sea usada con sus propios argumentos:
var buildfn = function(csvfile, headers) {
var response2console = function(result, response) {
if (result instanceof Error) {
console.error('Error: ' + util.format(response.message));
} else {
console.error("Wrote %s", csvfile);
fs.writeFileSync(csvfile, result);
csv2console(csvfile, headers);
}
};
return response2console;
};
===== Notas =====
* Para eliminar un objeto de memoria haremos: ''delete objeto;''. No se borra el objeto sino la referencia.
==== Snippets ====
=== String.Format ===
String.format = function() {
var s = arguments[0];
for (var i = 0; i < arguments.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, arguments[i + 1]);
}
return s;
}