Tema 3 - Introducción A JavaScript
Tema 3 - Introducción A JavaScript
Tema 3 – Introducción a
JavaScript
Michel Maes
Micael Gallego Francisco Gortázar [email protected]
Correo: [email protected] Correo: [email protected]
Óscar Soto
Twitter: @micael_gallego Twitter: @fgortazar
[email protected]
01-2023
©2023
Micael Gallego, Francisco Gortázar, Michel Maes, Óscar Soto
Algunos derechos reservados
Este documento se distribuye bajo la licencia
“Atribución-CompartirIgual 4.0 Internacional”
de Creative Comons Disponible en
https://creativecommons.org/licenses/by-sa/4.0/deed.es
Tecnologías del cliente
JavaScript
• Introducción
• Características básicas
• HTML interactivo
3
Tecnologías del cliente
JavaScript
• Introducción
JavaScript
Librerías JavaScript
Frameworks de alto nivel
Referencias
• El lenguaje JavaScript
• HTML Interactivo
4
Introducción
JavaScript
• Versiones: ES5
– La versión del estándar más utilizada actualmente es
EcmaScript es la 5.1 (2011), aunque generalmente se
la conoce como ES5
– Prácticamente todos los navegadores soportan la
mayoría de las características definidas en el
estándar 5.1
– Será el estudiado salvo que se indique lo contrario
http://kangax.github.io/compat-table/es5/
7
Introducción
JavaScript
• JavaScript no es Java
– Aunque algunos elementos de la sintaxis
recuerden a Java, son lenguajes
completamente diferentes
– El nombre JavaScript se eligió al publicar el
lenguaje en una época en la que Java
estaba en auge y fue principalmente por
marketing (inicialmente se llamó
LiveScript)
9
Introducción
JavaScript
• Características principales de JavaScript
Scripting: No necesita compilador. Inicialmente era un
lenguaje interpretado, pero actualmente se ejecuta con
máquinas virtuales en los navegadores (mayor
velocidad de ejecución y eficiencia de memoria)
Tipado dinámico: habitual en los lenguajes de script
Funcional: Las funciones son elementos de primer
orden
Orientado a objetos: Basado en prototipos, no en
clases como Java, C++, Ruby…
10
Introducción
JavaScript
• DOM (Document Object Model)
Librería (API) para manipular el documento HTML
cargado en el navegador
Permite la gestión de eventos, insertar y eliminar
elementos, cambiar propiedades..
• BOM (Browser Object Model)
Acceso a otros elementos del browser: historial,
peticiones de red AJAX, etc…
El BOM incluye al DOM como uno de sus elementos
11
Introducción
JavaScript
12
Introducción
Librerías JavaScript
• Existen multitud de bibliotecas
(APIs) JavaScript para el
desarrollo de aplicaciones
• Algunas de las más usadas son:
jQuery: es un recubrimiento de la API DOM que aporta
facilidad de uso, potencia y compatibilidad entre navegadores.
Se usa para gestionar el interfaz de usuario (la página web) y
para peticiones ajax.
underscore.js: Librería para trabajar con estructuras de datos
con un enfoque funcional. También permite gestionar plantillas
(templates) para generar HTML partiendo de datos
13
Introducción
Frameworks de alto nivel
14
Introducción
Referencias
(2008) (2012)
15
Introducción
Referencias
19
El lenguaje JavaScript
Características del lenguaje
• Lenguaje de script (Java es compilado)
No existe compilador
El navegador carga el código, lo analiza y lo ejecuta
El navegador indica tanto errores de sintaxis como
errores de ejecución
• Tipado dinámico (Java tiene tipado estático)
Al declarar una variable no se indica su tipo
A lo largo de la ejecución del programa una misma
variable puede tener valores de diferentes tipos
20
El lenguaje JavaScript
Características del lenguaje
21
El lenguaje JavaScript
Características del lenguaje
• Orientado a objetos
Todos los valores son objetos (no como en Java, que existen tipos
primitivos)
Existe recolector de basura para liberar la memoria de los objetos
que no se utilizan (como en Java)
La orientación a objetos está basada en prototipos (en Java está
basada en clases)
En tiempo de ejecución se pueden crear objetos, cambiar el valor
de los atributos e invocar a métodos (como en Java)
En tiempo de ejecución se pueden añadir y borrar atributos y
métodos (en Java no se puede)
22
El lenguaje JavaScript
Características del lenguaje
• Funciones
Aunque sea orientado a objetos, también permite
declarar funciones independientes (en Java todas las
funciones son métodos de clases)
Las funciones se pueden declarar en cualquier sitio,
asignarse a variables y pasarse como parámetro
Existen funciones anónimas (como las expresiones
lambda de Java)
En JavaScript se puede implementar código siguiendo
el paradigma funcional
23
El lenguaje JavaScript
Integración con HTML
• El código JavaScript se puede incluir directamente en el
documento HTML en etiquetas <script>
• Pero es recomendable que el código JS esté en en ficheros
aparte
• El código será cargado y ejecutado cuando se encuentre en el
documento, antes de continuar procesando el HTML
<html>
<body>
<scrip>alert("Hola");</script>
...
<script src="js/script.js"></script>
...
</body>
</html>
24
El lenguaje JavaScript
Sintaxis básica
● Mostar información desde JavaScript
– Escribiendo en el documento HTML en la
posición del script
document.write('Texto');
25
El lenguaje JavaScript
Sintaxis básica
26
El lenguaje JavaScript
Sintaxis básica
• Variables
Es un lenguaje dinámico (con tipado dinámico)
Las variables se tienen que declarar pero no se indica el tipo
31
El lenguaje JavaScript
Arrays
32
El lenguaje JavaScript
Arrays
● Pero se diferencian en algunos detalles
– Los arrays literales con [ ] en vez de { } y sin new
33
El lenguaje JavaScript
Arrays
34
El lenguaje JavaScript
Arrays
var numbers = [3, 4, 4, 2];
document.write(numbers[5] + '<br>');
numbers[7] = 4;
document.write(numbers[7] + '<br>');
undefined
4
3,4,4,2,undefined,undefined,undefined,4,
35
El lenguaje JavaScript
Arrays
var numbers;
document.write(numbers[5] + '<br>');
36
El lenguaje JavaScript
Arrays
37
El lenguaje JavaScript
Arrays
38
El lenguaje JavaScript
Sentencias de control de flujo
• Bloques de sentencias
Con llaves { } (como en Java)
Las variables no desaparecen al terminar en bloque (en
Java si)
• Sentencia if
Sintaxis como en Java
No es obligatorio que la expresión devuelva un boolean
Se considera falso: false, null, undefined, “” (cadena
vacía), 0, NaN
39
El lenguaje JavaScript
Sentencias de control de flujo
if(!nombre){
nombre = 'Sin nombre';
}
40
El lenguaje JavaScript
Sentencias de control de flujo
41
El lenguaje JavaScript
Sentencias de control de flujo
• Sentencia return
Cuando se ejecuta fuerza la terminación de una
función (Como en Java)
Puede tener un valor asociado que será devuelto
por la función en la que se ejecute
// La función se ejecuta y el valor
// devuelto se asocia a x
function myFunction(a, b) {
return a * b;
}
42
El lenguaje JavaScript
Funciones
imprime(4);
43
El lenguaje JavaScript
Funciones
imprime(4);
44
El lenguaje JavaScript
Funciones
45
El lenguaje JavaScript
Funciones
imprimir(3);
Si se pasan menos parámetros de los que están en
la cabecera, los que faltan toman el valor undefined
(No hay error)
Si se pasan más parámetros de los que están en la
cabecera, los que sobran se ignoran (No hay error)
46
El lenguaje JavaScript
Funciones
47
El lenguaje JavaScript
Funciones
48
El lenguaje JavaScript
Funciones
49
El lenguaje JavaScript
Funciones
function alertOnClick(domNode) {
domNode.onclick = function(e) {
alert("Alerta");
}
}
51
El lenguaje JavaScript
Excepciones
52
El lenguaje JavaScript
Excepciones
try {
var error = ...;
if (error) {
throw "An error";
}
return true;
} catch (e) {
alert (e);
return false;
} finally {
//do cleanup, etc here
}
53
El lenguaje JavaScript
Ejercicio 1
• Crear una función que reciba un array como
parámetro y devuelva un array de dos elementos
• El primer elemento apuntará a un array con los
números pares del array que se pasa como parámetro
• El segundo elemento apuntará a un array con los
números impares del array que se pasa como
parámetro
• Para probar la función se implementarán varias
llamadas con diferentes arrays y el resultado se
mostrará en la consola del navegador
54
El lenguaje JavaScript
Ejercicio 2
• Crear una función que reciba
un array bidimensional, le
quite los ceros y ordene las
filas de menor a mayor
longitud
• Para probar la función se
implementarán varias llamadas
con diferentes arrays y el
resultado se mostrará en la
consola del navegador
55
El lenguaje JavaScript
Ejercicio 2
58
El lenguaje JavaScript
Orientación a Objetos
• Creación de objetos
En cualquier momento se puede crear un objeto,
definir sus atributos y asignarles valor
var empleado = {
nombre: "Pepe",
salario: 700
}
59
El lenguaje JavaScript
Orientación a Objetos
• Atributos de un objeto
var empleado = {
nombre: "Pepe",
salario: 700
}
console.log("S:"+empleado.salario);
empleado.salario = 800;
empleado.telefono = "663232539";
console.log("T:"+empleado.telefono);
60
El lenguaje JavaScript
Orientación a Objetos
• Métodos en un objeto
Los objetos pueden tener métodos
Los métodos son en realidad funciones asignadas a una
propiedad
var empleado = {
nombre: "Pepe",
salario: 700,
toString: function(){
return "N:"+this.nombre+" S:"+this.salario;
}
}
Para acceder a los atributos del
objeto es necesario usar this (en
Java es opcional) 61
El lenguaje JavaScript
Orientación a Objetos
• Métodos en un objeto
Los métodos se invocan con la notación punto (como en
Java)
//Devuelve 'Nombre:Pepe, Salario:700'
var texto = empleado.toString();
empleado.getCategoria = function(){
return this.salario > 800 ? 'Superior':'Normal';
}
62
El lenguaje JavaScript
Orientación a Objetos
• Métodos en un objeto
var empleado = {
nombre: 'Pepe',
salario: 700,
toString: function(){
return 'N:'+this.nombre+' S:'+this.salario;
}
}
empleado.getCategoria = function(){
return this.salario > 800 ? 'Superior':'Normal';
}
console.log('C:'+empleado.getCategoria());
63
El lenguaje JavaScript
Orientación a Objetos
64
El lenguaje JavaScript
Orientación a Objetos
console.log(obj.propiedad)
console.log(obj['propiedad'])
console.log(obj.metodo())
console.log(obj['metodo']())
66
El lenguaje JavaScript
Orientación a Objetos
68
Tecnologías del cliente
JavaScript
• Introducción
• El lenguaje JavaScript
• HTML Interactivo
Document Object Model (DOM)
jQuery
69
JavaScript
HTML Interactivo
<html>
<body>
<script>
function alerta(){
alert('El botón ha sido pulsado');
}
</script>
<button onclick="alerta();">Botón</button>
</body>
</html>
72
HTML Interactivo
Document Object Model (DOM)
• Eventos
También se pueden asociar eventos desde el código
JavaScript
document.addEventListener("DOMContentLoaded", function() {
alert('Documento cargado');
});
<html>
<head>
<script src='app.js'></script>
</head>
<body>
…
</body>
</html>
73
HTML Interactivo
Document Object Model (DOM)
• Acceso a los elementos del documento
En base a alguna de sus características
74
HTML Interactivo
Document Object Model (DOM)
document.getElementById('MyElement').className = 'MyClass';
75
HTML Interactivo
Document Object Model (DOM)
76
HTML Interactivo
Document Object Model (DOM)
77
HTML Interactivo
jQuery
http://jquery.com
78
HTML Interactivo
jQuery
• Características
– Facilita la manipulación de la página web (DOM)
– Unifica las diferencias que existen en los navegadores
(muy conveniente en la época del Internet Explorer)
– Para seleccionar elementos de la página con jQuery
usamos la misma sintaxis (selectores) en que en CSS
– Trabaja directamente con conjuntos de elementos,
de forma que no es necesario procesar cada elemento
de forma individual (no hay que hacer el for)
79
HTML Interactivo
jQuery
• Cada vez se usa menos
– Los navegadores más populares implementan los
estándares y se comportan de la misma forma
– La librería estándar cada vez es más completa y
potente
http://youmightnotneedjquery.com/
80
HTML Interactivo
jQuery
• Uso de jQuery
La librería se puede descargar de su página web para
desarrollo local (http://jquery.com/)
Cuando se publica una página web que usa la librería, en vez
de servir la librería en el servidor web, es mejor usar una ruta
en una red de distribución de contenido (CDN)
Si la librería está cacheada en el navegador del cliente no se
descargará de nuevo (reduciendo el tiempo de carga)
http://code.jquery.com
https://developers.google.com/speed/libraries/devguide#jquery
81
HTML Interactivo
jQuery
index.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js">
</script>
<script src="app.js"></script>
</head>
<body>
<h1>Title</h1>
<p>Text...</p>
</body>
</html>
82
HTML Interactivo
jQuery
app.js
$(document).ready(function() {
console.log('Document loaded');
})
• $(document).ready(…)
Ejecuta la función que se pasa como parámetro cuando el
documento HTML se ha cargado y antes de que se
descarguen las imágenes
Es ideal para ejecutar código de inicialización que asocia
eventos a los elementos de la página si el script se ejecuta
desde el head (antes de que se cargue el HTML)
83
HTML Interactivo
jQuery
app.js
$(document).ready(function() {
$('div.poem-stanza').addClass('highlight');
});
• $('div.poem-stanza').addClass('highlight');
• En el conjunto de elementos devueltos se pueden ejecutar
métodos que se ejecutarán sobre todos los elementos del
conjunto:
addClass(…): Añade una clase CSS a los elementos
removeClass(…): Elimina una clase CSS a los elementos
85
HTML Interactivo
jQuery
• Se puede escribir una función que se ejecutará cuando
se cargue el documento de forma muy compacta
pasando directamente la función a $
app.js
$(function() {
$('div.poem-stanza').addClass('highlight');
});
86
jQuery
Seleccionar elementos
• Selección de elementos con selectores CSS
Basados en elementos, clases e ids
$(function() {
$('#selected-plays > li').addClass('horizontal');
})
87
jQuery
Seleccionar elementos
• Selectores propios de jQuery (no CSS)
Elementos pares (empezando con 0)
$(function() {
$('tr:even').addClass('alt');
})
Hijos pares (empezando con 1)
$(function() {
$('tr:nth-child(odd)').addClass('alt');
})
http://api.jquery.com/category/selectors/
88
jQuery
Seleccionar elementos
• Seleccionar elementos con operaciones
Filtrar los elementos usando funciones (el elemento es this)
$(function() {
$('a').filter(function() {
return this.hostname && this.hostname!=location.hostname;
}).addClass('external');
})
varmyTag = $('#my-element').get(0).tagName;
90
jQuery
Eventos
• Los eventos se asocian a los elementos con el método
on
$(function() {
$('#button1').on('click', function() {
$('body').addClass('large');
});
});
$(function() {
$('#button2').on('click', function() {
$(this).addClass('selected');
});
});
this apunta al nodo nativo en el que se ha generado el evento.
$(this) convierte el nodo nativo en objeto jQuery
91
jQuery
Eventos
• Los eventos generados en un
elemento se pueden procesar
en el propio elemento o en
cualquiera de sus elementos
padre
• Cuando se configura un
manejador de eventos, el
evento se ha podido producir
en el propio elemento o en
cualquiera de sus hijos
• Se dice que el evento burbujea
(bubble)
92
jQuery
Eventos
• La función manejadora recibe el objeto event
– this: Objeto en el que se ha configurado el manejador
– event.target: Objeto que origina realmente el evento
– event.stopPropagation(): Evita que se ejecuten
manejadores de los elementos padre. Se detiene el
burbujeo.
– event.preventDefault(): Evita que el browser realice el
comportamiento por defecto para ese evento
$('#panel').on('click', function(event) {
console.log('Generado en:'+ event.target);
});
93
jQuery
Ejercicio 3
94
jQuery
Ejercicio 4
• Se desea implementar una barra de herramientas
para modificar los estilos de un documento
95
jQuery
Ejercicio 4
• Documento de ejemplo (descargar)
96
jQuery
Ejercicio 4
• Barra de herramientas
97
jQuery
Ejercicio 4
• Barra de herramientas
Botones
Default: Volver al estilo normal
Large print: Aplicar el estilo CSS “large” al body (y quitar los
demás)
Narrow Column: Aplicar el estilo CSS “narrow” al body (y quitar
los demás)
Opción seleccionada
La opción seleccionada debería reflejarse mostrando el texto
del botón en negrita (estilo “selected”)
98
jQuery
Ejercicio 4
• Barra de herramientas
Al cargar el documento, la barra de herramientas
debería aparecer minimizada (usando la clase CSS
“hidden”)
Al pulsar en ella, debe cambiar de modo
minimizado a normal (y viceversa)
99
jQuery
Ejercicio 4
• Barra de herramientas
Las teclas también pueden configurar el estilo:
D: Default
N: Narrow
L: Large
100
jQuery
Ejercicio 4
• Utilidades JavaScript / jQuery necesarias
$(…).is(“button”): Indica si el elemento tiene el
nombre de la etiqueta indicado
“sss-www”.split('-'): divide el String en un array de
Strings usando el '-'
$(document).keyup(…): Configura una función
que se ejecutará cuando se pulse una tecla
String.fromCharCode(event.which): Devuelve la
tecla pulsada como un String
101