Curso de Javascript
Curso de Javascript
CURSO DE
JAVASCRIPT
También debe tener en cuenta que el nombre de una variable no puede coincidir
En este capítulo aprenderás: con el de una palabra reservada de JavaScript (véase la tabla 2.2) ni con el de otro
elemento que hayamos definido (funciones u objetos).
Para terminar, quería mencionarle que también es posible eliminar un getter y • in: Nos permite saber si una propiedad o método existe en el objeto o instancia
setter mediante el operador delete como si fuera una propiedad más. que indiquemos, devolviendo un valor true o false. El nombre a comprobar
debe estar escrito como un string. Si lo usamos contra un objeto, solamente
// Accedemos al getter
console.log(unCoche.marca); // Mostraría "Este coche es: --- Fiat ---"
funcionará con los que vienen predefinidos en JavaScript (detallados en los
// Eliminamos la pseudopropiedad siguientes capítulos).
delete unCoche.marca;
console.log(unCoche.marca); // Mostraría undefined // Objeto definido con llaves
var coche1 = {
marca: "Fiat"
Puede que esté pensando: "¿Y qué ocurre si vuelvo a asignar un valor a la };
propiedad marca?". Pues vamos a verlo. // Objeto definido con function
1. Objetos básicos: Les he dado este nombre ya que son objetos sin una
excesiva complejidad o son un envoltorio (wrapper) de los tipos de datos
Objetos básicos predefinidos (booleano, número y cadena o string), es decir, crear una
instancia de uno de estos objetos mediante la sentencia new equivale a
de JavaScript declarar una variable directamente con el valor. Son los que veremos en este
capítulo.
2. Objetos intermedios: Aquí se engloban objetos que tienen cierta persona-
lidad propia y utilizan tipos de datos que aún no hemos visto.
3. Objetos avanzados: No se asuste por el nombre. La única diferencia respecto
a los grupos anteriores es que manejan estructuras de datos que aún no hemos
presentado y por eso requieren una explicación algo más extensa.
NOTA:
En este capítulo aprenderás: Algunos métodos han sido introducidos en versiones posteriores a ES6, por lo que
aparecerán marcados entre corchetes (por ejemplo, [ES7]) para que tenga en cuenta que,
si los utiliza, el entorno donde lo utilice debe soportar la especificación correspondiente
• Manejar los objetos fundamentales de JavaScript. de ECMAScript.
• Diferenciar los métodos de objeto y de instancia.
• El objeto JSON. Le adelanto que todos los objetos predefinidos en JavaScript disponen el
método toString(), que devuelve el objeto expresado como una cadena, reali-
zando para ello conversiones implícitas si es necesario. Para hacer uso de él,
basta con hacer la llamada desde la instancia que nos interese: miInstancia.
toString().
Objeto Boolean
Como puede imaginar, este objeto expresa un valor como un booleano, o lo que
es lo mismo, como true o false.
Objeto Array 4. Mediante el uso de corchetes ([] o [valor1, valor2, ..., valorN]): No es
propiamente un constructor, sino que equivaldría a crear directamente una
instancia, como ocurría con los objetos definidos con llaves. Obtendremos un
¡Vamos por fin con este objeto que tantas veces hemos nombrado páginas
array vacío si no se indican valores o bien uno relleno con los valores pasados
atrás!
como parámetros.
Las variables de JavaScript normalmente almacenan un único valor, el cual
// Creación de instancias
podemos recuperar cuando utilizamos su nombre dentro de una expresión. Esto var array1 = []; // Vacío y sin posiciones
se nos puede quedar corto en determinadas ocasiones como si, por ejemplo, var array2 = [5]; // 1 posición, valor number
quisiéramos almacenar por separado los platos del menú de un restaurante para var array3 = ["a", "b", "c"]; // 3 posiciones, valores string
var array4 = [1, 2, 3]; // 3 posiciones, valores number
después mostrarlos en nuestra página. Gracias a los arrays podremos almacenar var array5 = ["a", 2, false]; // 3 posiciones, valores de tipos distintos
todos estos platos en una única variable como si esta tuviera huecos o casillas
que se rellenan con los valores, permitiéndonos acceder a cada plato individual El tipo de datos de los valores almacenados en un array puede ser cualquiera,
con tan solo indicar cuál es su hueco, es decir, la posición dentro del array. A esta incluso puede ser distinto en cada una de las posiciones. En otros lenguajes,
posición se le denomina índice. los arrays están forzados a que los datos sean siempre del mismo tipo (entero,
booleano, etc.).
Constructor TRUCO:
Podemos crear una instancia (mediante corchetes) con posiciones vacías simplemente
Para crear un array tenemos varios constructores: poniendo tantas comas como huecos necesitemos, omitiendo los valores. Equivaldría
al constructor new Array(longitud).
1. new Array(): Crea un array vacío, sin huecos donde almacenar nuestros datos.
Esto es útil cuando no sabemos la longitud inicial que tendrá el array cuando // Creación de instancia con posiciones vacías
var array1 = [ , ]; // 1 posición
lo utilicemos en nuestro código. var array2 = [ , , , ]; // 3 posiciones
// Objeto Array // Mostramos valores
var miArray = new Array(); // Vacío y sin posiciones console.log(array1); // [undefined]
console.log(array2); // [undefined, undefined, undefined]
2. new Array(longitud): En este caso el array se crea con tantos huecos como
indique el parámetro longitud. Cada hueco tendrá un valor undefined.
// Objeto Array
Propiedades
var miArray = new Array(5); // 5 posiciones vacías
El objeto Array solo dispone de una propiedad:
3. new Array(valor1, valor2, ..., valorN): Con este constructor crearemos
un array con tantas posiciones como valores hayamos pasado como pará- • length: Nos indicará la longitud o número de elementos del array. Aquí hay
metros y, además, dichos huecos irán rellenos con el valor correspondiente. que prestar atención, puesto que no influye el que los huecos tengan valor o
Tenga cuidado, pues, si únicamente indica un valor y es de tipo numérico, no, sino que basta con que la posición exista y sea accesible.
JavaScript lo interpretará como el constructor anterior. // Creación de instancias
var array1 = new Array();
// Objeto Array var array2 = new Array(3);
var array1 = new Array("5"); // 1 posición, 1 valor string var array3 = ["a", "b"];
var array2 = new Array("a", "b", "c"); // 3 posiciones, valores string // Mostramos valores
var array3 = new Array(1, 2, 3); // 3 posiciones, valores number console.log(array1.length); // 0
var array4 = new Array("a", 2, false); // 3
posiciones, valores de tipos console.log(array2.length); // 3
distintos console.log(array3.length); // 2
Puede comprobar que es una función sencilla de entender y de manejar, así que
vamos a volver a modificar nuestro ejemplo para que se realice el sumatorio con
cinco segundos de retardo, simulando la espera de respuesta de la base de datos. Promesas
// Suma de números, modo asíncrono
// Declaración de función Las promesas surgen como la interpretación de JavaScript para manejar peti-
function sumar(acumulado, numero) {
return acumulado + numero;
ciones asíncronas y que se integraron de forma nativa en ECMAScript 6, por lo
} que no hay que recurrir a librerías adicionales. Además, incluyen mecanismos
// Función de callback para conocer y controlar el resultado de la misma, que puede cumplirse o no,
function calcularSuma(array) {
var resultado = array.reduce(sumar, 0); como en la vida real. Cuando una promesa se cumple, decimos que se resuelve
console.log(resultado); // 6 (resolve) y, en caso contrario, que se rechaza (reject).
}
// Código asíncrono
function obtenerNumeros(fnCallback) {
numeros = [1, 2, 3]; Estados de una promesa
setTimeout(() => fnCallback(numeros), 5000);
} Cuando se trabaja con este concepto de asincronía, podemos pasar por varias
// Obtención de datos y callback cuando termine
obtenerNumeros(calcularSuma);
fases durante su ciclo de vida.
console.log("Esperando el resultado...");
// Se mostrarán los mensajes: • Pendiente (pending): Corresponde a su estado inicial, cuando todavía no
// "Esperando el resultado..." conocemos su resultado.
// 6 (5 segundos más tarde)
• Resuelta (fulfilled): Indica que la promesa se ha cumplido y obtendremos
¡El experimento es todo un éxito! Con esto hemos podido comprobar que el un valor a cambio que será el resultado de la ejecución.
flujo de ejecución no se detiene en la llamada a obtenerNumeros, puesto que
la instrucción siguiente se ejecuta al instante (el mensaje de espera) y el callback • Rechazada (rejected): Nos hace saber que la ejecución ha fallado y nos propor-
calcularSuma lo hace segundos más tarde. cionará el motivo del error.
NOTA:
Los eventos se consideran operaciones asíncronas, ya que no sabemos cuándo van a
suceder.
Eventos en front-end
En JavaScript existe una amplia variedad de eventos que podremos utilizar a
En este capítulo aprenderás: nuestro antojo para crear las situaciones que queramos o conseguir un efecto
concreto. La tabla 14.1 le mostrará los eventos principales y la acción que los
genera.
• Reaccionar a eventos desde el front-end.
Tabla 14.1. Lista de eventos en front-end.
• El objeto Event.
Evento Origen
• Controlar la propagación de eventos.
Click Se hace clic sobre un elemento.
• Trabajar con eventos desde el back-end.
DblClick Se hace doble clic sobre un elemento.
MouseDown Se hace clic con un botón cualquiera del ratón.
MouseUp Se libera un botón del ratón que estaba pulsado.
MouseMove Se mueve el puntero por la pantalla.
MouseOver El puntero entra en el área que ocupa un elemento (se pasa por encima).
MouseOut El puntero sale del área que ocupa un elemento (se quita de encima).
KeyPress Una tecla es pulsada. Se genera después de KeyDown.
KeyDown Una tecla es pulsada sin soltarla.
Métodos
Ahora que conoce un poco más a los traviesos eventos, le presento algunos
métodos de Event que nos proporcionan un mayor control sobre ellos.
• preventDefault(): Cancela un evento, evitando que se ejecute su acción por
defecto. Esto no evita que el evento se siga propagando. Veamos un ejemplo
con un checkbox, cuya acción por defecto en un evento click es marcarse
Figura 14.5. Información al hacer clic sobre boton2. o desmarcarse.
<HTML>
Tabla 14.3. Propiedades de un evento de ratón. <BODY>
<DIV ID="capa1">
Propiedad Tipo Descripción <FORM ID="formulario1">
altKey Booleano Devuelve true cuando se ha presionado la tecla Alt. <INPUT
TYPE="checkbox"
button Entero Indica el botón del ratón que ha sido pulsado. (Ver tabla 14.4). ID="check1"
clientX /> Confirmar
Entero Indica la posición horizontal del cursor donde se ha hecho clic,
</FORM>
dentro del área disponible en el documento.
</DIV>
clienteY Entero Indica la posición vertical del cursor donde se ha hecho clic, <SCRIPT TYPE="text/javascript">
dentro del área disponible en el documento. // Declaración de función
function cancelarEvento(evento) {
ctrlKey Booleano Devuelve true cuando se ha presionado la tecla Control. evento.preventDefault();
type String Indica el tipo de evento que se ha producido (click, console.log(‛Evento ${evento.type} cancelado‛);
mouseover, etc.). }
// Asignación de manejadores
screenX Entero Indica la posición horizontal del cursor donde se ha hecho clic, document
dentro de la resolución de pantalla del usuario. .getElementById("check1")
screenY .onclick = cancelarEvento;
Entero Indica la posición vertical del cursor donde se ha hecho clic,
document
dentro de la resolución de pantalla del usuario.
.getElementById("capa1")
shiftKey Booleano Devuelve true cuando se ha presionado la tecla Mayús. .onclick = () => console.log("Clic en capa1");
</SCRIPT>
</BODY>
Tabla 14.4. Valores de la propiedad button. </HTML>
Valor Descripción Si hacemos clic sobre check1, veremos que no se selecciona nunca, ya que
0 Botón izquierdo del ratón. hemos cancelado su acción por defecto, pero sí se muestran por consola tanto
1 Botón central del ratón. el mensaje de cancelación como el mensaje de la capa1 porque se propaga el
2 Botón derecho del ratón.
evento hasta ella.
3 Para un cuarto botón. • stopPropagation(): Detiene la propagación de un evento hacia niveles
4 Para un quinto botón. superiores del DOM.
<HTML>
<BODY>
NOTA: <DIV ID="capa1">
<INPUT
Si tenemos el ratón configurado para zurdos, los valores de la tabla 14.4 pueden TYPE="checkbox"
mostrarse en otro orden. ID="check1"
/> Confirmar
Manual Imprescindible
JavaScript lleva presente en el mundo Web prácticamente desde que Internet fue accesible
para el mundo entero, pero ha sabido crecer y adaptarse a las nuevas necesidades y tendencias
convirtiéndose en un lenguaje con un peso importante.
Este libro pretende enseñarle JavaScript desde su base para que pueda comprender
perfectamente cómo está estructurado internamente y así le resulte mucho más sencillo dar
el paso hacia los siguientes niveles, puesto que sus secretos no terminan en la última página.
La manera de abordar la materia será siempre de un modo progresivo, con explicaciones
claras y mostrando uno o varios ejemplos de lo expuesto, de forma que un capítulo sirva
como preludio del siguiente, como si se estuviera construyendo una escalera hacia su
objetivo: dominar JavaScript.
2311350
MULTIMEDIA www.anayamultimedia.es