
Mini repaso
¿ Qué aprenderemos en esta semana de JavaScript?
- Aprenderemos todas las bases
- Variables, controles de flujo, bucles
- Funciones
- Objetos
- Manipulación del DOM (html)
- JQuery
- BootstrapJS
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="js/main.js"></script>
</body>
</html>
alert('Hola, soy tu primera línea de JavaScript !');js/main.js
Debajo is good ;)
...
<script src="js/main.js"></script>
</body>
</html>

alert('Esto es un mensaje de alerta !');alert() console.log() prompt() confirm()
console.log('Esto es un mensaje que aparece en la consola :O');prompt( ' Dime tu edad ');confirm( '¿Sabes español?');Variables
- De tipo boolean.
- De tipo String.
- De tipo number.
- Null o Undefined
¿Y si ...?
var edadUsuario = prompt('Dime tu edad');
console.log(edadUsuario);estructuras de control
var fruit = prompt('¿Cuál es tu fruta favorita?');;
if (fruit == 'Pera') {
console.log('Hmmm que rico');
}
if (fruit == 'Manzana'){
console.log('Que ricas las manzanas');
}else{
console.log('¿Cómo no te van a gustar las manzanas?');
}
arrays
var frutas = [ "Peras" , "Manzanas", "Platanos"];
for ( var pos = 0; pos < frutas.length ; pos++ ){
// En cada vuelta, puedo usar pos para leer una fruta
var fruta = frutas[pos];
console.log(`Encontre la fruta ${fruta}`);
}
El bucle for
var frutas = [ "peras" , "manzanas" , "platanos"];
for ( var indice = 0 ; indice < frutas.length ; indice++){
console.log( 'La fruta número ' + (indice+1) + ' es ' + frutas[indice]);
}
for ( var indice = 0 ; indice < frutas.length ; indice++ )Inizialicación
condición
nuevo estado
ARRAY. añadir y quitar
var frutas = [ "Peras" , "Manzanas", "Platanos"];
// Añadir una fruta nueva al array con push
frutas.push( "Limones" );
for ( var pos = 0; pos < frutas.length ; pos++ ){
var fruta = frutas[pos];
console.log(`Encontre la fruta ${fruta}`);
if (fruta == "Limones"){
alert('Puagg, no me gustan los limones');
// Eliminar algo de un array con splice
frutas.splice(pos,1);
}
}¿Qué podíamos hacer con JavaScript?




MANIPULACIÓN DEL DOM/HTML

JavaScript y las variables globales
Cuando desarrollamos una web, podemos acceder a unas determinadas variables y funciones que ya están creadas por defecto.
Por ejemplo, cuando usábamos el console.log() o el alert eran funciones globales
Document
var nuestraWeb = document.body;
nuestraWeb.innerHTML = `<h1> Nuevo HTML</h1>`var mensaje = "Mi nombre";
mensaje = mensaje + ' no es ';
mensaje += 'Miguel';
console.log(mensaje) // Mi nombre no es MiguelPausa informativa
innerHTML + getElementById
var results = document.getElementById('results');
var numero = 25;
results.innerHTML += `<p> Nuevo resultado = ${numero}</p>`;<body>
<div id="results">
<h1> Zona de resultados <h1>
</div>
</body>innerHTML + getElementById
var displaySection = document.getElementById('display');
var username = prompt(`Hola, ¿cómo te llamas?`);
displaySection.innerHTML += `<h1> Bienvenido ${username}</h1>`;<body>
<div id="display"></div>
</body>
Ejercicio
Ahora que sabemos escribir en el HTML, vamos a darle uso. Crea un article en el html con el id "myArticuloDeJavaScript" Desde el código de JavaScript, accede a el mediante el ID y guardalo en una variable. A continuación, añadele estas tres cosas: - Un h2 con un título. - Un párrafo con cualquier contenido. - Un blockquote con una frase
Resultado
var articulo = document.getElementById('myArticuloDeJavaScript');
//articulo.innerHTML = '<h2>Mi titulo </h2>';
//articulo.innerHTML += '<p>Mi parrafito super molon </p>';
//articulo.innerHTML += '<blockquote>Una cita </blockquote>';
articulo.innerHTML = `
<h2>Este es el titular</h2>
<p>Esto es el contenido super molon que hay en el parrafo</p>
<blockquote> Esta es una cita </blockquote>
`;
articulo.innerHTML = '<h2>Mi titulo </h2> ' + 'p ' + 'block ';
Ejercicio
Crea dos elementos en el HTML con los identificadores que prefieras para poder acceder a ellos desde javascript luego. Pídele al usuario su nombre y luego su edad. Añade a uno de los dos elementos de la pantalla un mensaje de bienvenida con su nombre y con un formato de <h2>. En el otro bloque, añade un mensaje de 'No deberías entrar a esta web si eres menor de edad, ¿estás seguro?' y además dos botones (<button>) uno que ponga SI y otro NO. (añádelo solamente si era menor de 18)
Ejercicio
Crea un elemento en el HTML con el identificador 'listaDeFrutas'
Crea un array vacío que se llamará frutas. INVESTIGA como crear un array vacío si no lo sabes ;) #GoogleIsYourFriend
Pídele al usuario que introduzca sus 3 frutas favoritas y ve añadiéndolas al array
Ahora viene lo bueno ;) en ese elemento que hay en el DOM, añade una lista dónde aparezcan cada una de las frutas y una cabezera que diga 'Estas son tus frutas favoritas:'

SOLUCION
var frutas = [];
var fruta1 = prompt('Dime una fruta favorita');
var fruta2 = prompt('Dime otra fruta favorita');
var fruta3 = prompt('Dime otra fruta favorita');
frutas.push(fruta1)
frutas.push(fruta2)
frutas.push(fruta3)
// frutas.push(fruta1, fruta2, fruta3)
var pantalla = document.getElementById('listaDeFrutas');
pantalla.innerHTML = '<h2>estas son tus frutas favoritas</h2>';
pantalla.innerHTML += '<ul>';
/*
pantalla.innerHTML += '<li>' + frutas[0] + '</li>';
pantalla.innerHTML += '<li>' + frutas[1] + '</li>';
pantalla.innerHTML += '<li>' + frutas[2] + '</li>';
*/
for (var i = 0 ; i < frutas.length ; i++){
pantalla.innerHTML += '<li>' + frutas[i] + '</li>';
}
pantalla.innerHTML += '</ul>';Ejercicio
¿Se te ocurre como darle estilo a esa lista?
Consigue que la lista aparezca con un diseño similar a este
1. Dale estilo a los <li>
2. Dale estilo mediante clases.
3. Dale estilo a la <ul> . Si notas algo raro, mira este enlace ;) https://stackoverflow.com/a/26728777


Sigamos

functions
Las funciones son una serie de instrucciones que se ejecutan al llamarla y que normalmente devuelven un resultado. Por ejemplo, nosotros ya hemos usado funciones, en este caso hemos usado los console.log(), los alert() o incluso el .getElementById( );
Una función tiene esta pinta
function elevarAlCuadrado ( numero ) {
return numero * numero ;
}
Cuando la creamos
var cuadrado = elevarAlCuadrado(10);Cuando la usamos
function elevarAlCuadrado ( numero ) {
return numero * numero ;
}
Este sería el nombre de la función y es el que usaremos para llamarla.
Una función tiene esta pinta
function elevarAlCuadrado ( numero ) {
return numero * numero ;
}
Dentro del paréntesis están los "parámetros" de la función.
Esto son valores que nos pasan al llamarnos y que podremos usar dentro de la función
Una función tiene esta pinta
function elevarAlCuadrado ( numero ) {
return numero * numero ;
}
Si nuestra función devuelve hacia afuera un resultado debemos escribir un return y a la derecha el resultado.
En este caso la función elevarAlCuadrado devuelve la multiplicación de un número por si mismo.
Una función tiene esta pinta
function elevarAlCuadrado ( entrada ) {
return entrada * entrada ;
}
var numero = 12;
var resultado = elevarAlCuadrado( numero );
console.log(`${numero} al cuadrado es ${resultado}`);¿para que nos sirven?
Nos permite separar los problemas en problemas mucho más pequeños.
Nos aporta mucha más semántica a nuestro código.
Nos evita duplicar código que luego tendremos que mantener.
Nos facilita el trabajo en equipo.
Entender un código de JavaScript de 200 líneas que no usa funciones ... créeme .. que no te lo desearía ni aunque fueras mi peor enemigo
Con los ejemplos que ya hemos hechos
var DNIs = ['45778863P', '45778864P'];
var DNIUser = prompt('¿Cúal es tu DNI?');
for (var i = 0; i < DNIs.length; i++){
if( dnis[i] == DNIUser ){
dnis.splice(i,1);
alert('He encontrado el DNI, así que lo borro');
}
}Con los ejemplos que ya hemos hechos
var DNIs = ['45778863P', '45778864P'];
var DNIUser = getDNI();
checkAndRemoveDNIUser(DNIs, DNIUser);
Con los ejemplos que ya hemos hechos
function getDNI(){
var dni = prompt('Por favor, ¿podrías indicarnos tu DNI?');
// Aqui también podríamos validar que el DNI es correcto
return dni;
}function getDNIUltraPowered(){
var dni = prompt('Por favor, ¿podrías indicarnos tu DNI?');
var DNIValid = Regex.IsMatch(dni, @"\d{8}[a-zA-Z]$") ;
if (!DNIValid){
alert('DNI INCORRECTO');
return getDNIUltraPowered();
}else{
return dni;
}
}Con los ejemplos que ya hemos hechos
function checkAndRemoveDNIUser(dnis, dni){
for (var i = 0; i < dnis.length; i++){
if( dnis[i] == dni ){
dnis.splice(i,1);
alert('He encontrado el DNI, así que lo borro');
}
}
}Si hubiésemos hecho todo esto que hicimos suelto :S
var DNIs = ['45778863P', '45778864P'];
var dni = prompt('Por favor, ¿podrías indicarnos tu DNI?');
var DNIValid = Regex.IsMatch(dni, @"\d{8}[a-zA-Z]$") ;
while( !DNIValid ){
alert('DNI INCORRECTO');
dni = prompt('Por favor, ¿podrías indicarnos tu DNI?');
DNIValid = Regex.IsMatch(dni, @"\d{8}[a-zA-Z]$") ;
}
for (var i = 0; i < DNIs.length; i++){
if( DNIs[i] == dni ){
DNIs.splice(i,1);
alert('He encontrado el DNI, así que lo borro');
}
}
"Sin funciones" vs con funciones

+600 líneas en un único .js

ficheros menores de 70 líneas y funciones menores de 15 líneas
while
var nombre = prompt('Dime tu nombre');
while ( nombre == 'Miguel'){
alert('Lo siento, Miguel no puede pasar');
nombre = prompt('Dime otro nombre');
}
alert('Ahora si puedes pasar' + nombre);
Ejercicio
Pídele al usuario que indique cuantos plátanos quiere comprar. NO PUEDE introducir cualquier número, solo puede escoger un racimo de plátanos, así que ha de escoger un número mayor de 5
Recógelo y verifica que es un número que sea mayor que 5, sino pídele otro hasta que introduzca un número válido
Recuerda el bucle while para preguntar hasta que sea mayor que 5
Ejercicio
Partiendo del ejercicio anterior, realiza un bucle for que de tantas vueltas como plátanos y en cada vuelta imprime el siguiente mensaje en la consola:
'Hmmm, que rico estaba el plátano número N'
Ejercicio
Partiendo del ejercicio anterior,
destina un elemento en el DOM para escribir mensajes, y escribe una '<p>' cada vez que se come un plátano que ponga "El Plátano N ha sido comido"
Ejercicio
Partiendo del ejercicio anterior y al terminar, pregúntale al usuario si quiere volver a comprar otro racimo y si responde que sí vuelve a hacer lo mismo.
Resuelto
var pregunta = true;
while (pregunta == true ) {
var platanos = prompt('¿Cuántos platanos quieres comprar? (min. 6)');
while (platanos <= 5) {
alert('El número era menor que 6');
platanos = prompt('Dime otro numero');
}
var pantalla = document.getElementById('mensajes');
pantalla.innerHTML = '';
for (var i = 0; i < platanos; i++) {
console.log('Hmmm que rico estaba el platano ' + (i + 1));
pantalla.innerHTML += `<p>El platano ${i + 1} ha sido comido</p>`;
}
pregunta = confirm('¿Quiéres volver a comprar?');
}¿Cómo lo ves?
¿Crees que podríamos dividir este problema en pequeñas funciones?
¿Qué partes de tu código crees que podrías separar en una función?
Recuerda, divide y vencerás.
Ejercicio
Trata de pasar el código anterior a pequeñas funciones
PISTA: Se me ocurren las siguientes funciones:
- escogerRacimo()
- comerRacimo()
Directo
Vamos a ver como resolvería yo este problema y verán que sencillo es paso a paso con funciones
SOLUCIÓN
var racimo = recogerRacimo();
comerRacimo(racimo);function recogerRacimo() {
var racimo = pedirNumero();
while (racimo < 6) {
alert('Solo hay racimos con más de 6 plátanos');
racimo = pedirNumero();
}
return racimo;
}function comerRacimo(racimo) {
var display = document.getElementById('mensajes');
for (var i = 1; i <= racimo; i++) {
display.innerHTML += `
<p>Me he comido el plátano ${i}</p>
`;
}
}function pedirNumero(){
return prompt('¿Cuántos plátanos quieres? (min 6)');
}Ejercicio
Ahora imaginemos, que al día siguiente el frutero solo tiene racimos mayores de 7 o que otro día tiene racimos solo de 3 a 7 plátanos. ¿cómo cambiarías el código para que funcione en este caso?
function escogerRacimo(){
var minimo = 7;
var numero = pedirNumero(minimo);
while( numero <= minimo ){
alert(`Solo puede ser mayor que ${minimo}`);
numero = pedirNumero(minimo);
}
return numero;
}function escogerRacimo( minimo, maximo ){
var numero = pedirNumero(minimo, maximo);
while( numero < minimo || numero > maximo){
alert(`Solo puede ser mayor que ${minimo}
y menor que ${maximo}`);
numero = pedirNumero(minimo, maximo);
}
return numero;
}PARAMETRIZAR UNA FUNCIÓN
80%

Hemos visto
Variables primitivas (boolean, number, string)
Estructuras de control (el if y el switch)
el bucle for y el while
los Arrays
y las funciones
el bucle while
var numeroDeVueltas = 5;
while (numeroDeVueltas > 0) {
numeroDeVueltas--;
console.log(`Voy a dar una vuelta, quedan ${numeroDeVueltas}`);
}¡ IMPORTANTÍSISISISISISIMO !
Salvo que quieras perder tu RAM con un bucle infinito y que tu PC eche a volar
otro bucle más el forEach()
El forEach es un bucle que nos permite recorrer de manera MUCHO MÁS SENCILLA un array
AUNQUE TE AVISO, LA PRIMERA VEZ TE VA A ASUSTAR ;) AVISADO QUEDAS
foreach()
var users = [ "Yunior", "Miguel" ];
users.forEach( function (user) {
console.log(user);
});El método forEach() ejecuta la función indicada una vez por cada elemento del array.
foreach()
var users = [ "Yunior", "Miguel" ];
users.forEach( function (user) {
console.log(user);
});foreach()
var users = [ "Yunior", "Miguel" ];
users.forEach( function (user, indice) {
console.log(`usuario = ${user}`);
console.log(`posicion = ${indice}`);
});Si necesito usar la posición, puedo pedirle al forEach que me diga las posiciones.
Para eso, le indico una función con dos parámetros.
Ejemplo
var dnis = [ "44552342B", "12345678A" ];
dnis.forEach( function (dni) {
if (dni == "12345678A"){
alert('Te encontré');
}
});Recorrer los DNIs y si encuentro el 12345678A muestra un mensaje
Ejemplo
var dnis = [ "44552342B", "12345678A" ];
dnis.forEach( function (dni, indice) {
if (dni == "12345678A"){
dnis.splice(indice, 1);
}
});Recorrer los DNIS y si encuentro el 12345678A lo borramos
Mini ejercicio
Create un array con el nombre de 3 frutas
Recorre el array con un forEach y muestra en la consola cada fruta
Mini ejercicio
Create un array con el nombre de 3 frutas
Recorre el array con un forEach y muestra en la consola cada fruta
Si encuentras la fruta "Manzana" muestra en la consola el mensaje las manzanas no me gustan
Sigamos

Los objetos
¿Cómo definirías en la vida real un coche?
Imagínate que me tienes que describir el último coche en el que te montaste, ¿qué cosas dirías para describirlo?

¿Dirías que todos son coches?
¿Qué cosas los distingue?
Objetos
Los objetos nacen con el objetivo de poder representar datos más complejos y acercarlos a la realidad.
Por ejemplo, una persona o un usuario no solo tiene nombre y no se representaría al completo con una string con su nombre, para ello creamos un objeto que tiene varias "propiedades"
var usuario = {
nombre : 'Yunior',
edad : 23,
email : 'yunior@getinko.com',
frutasFavoritas: ['Fresa','Sandia']
}Otro ejemplo
var coche = {
marca : 'Mercedes',
altura : '120cm',
largo : '330cm',
precio : 25000
}Objetos
var usuario = {
nombre : 'Yunior',
edad : 23,
email : 'yunior@getinko.com'
}
var nombre = usuario.nombre;
var edad = usuario.edad;
console.log(`El usuario se llama ${nombre}
y tiene ${edad} años`);Antes
var usuarios = ['Yunior','Miguel'];
Objetos
var yunior = {
nombre : 'Yunior',
edad : 23,
email : 'yunior@getinko.com'
};
var miguel = {
nombre : 'Miguel',
edad : 35,
email : 'miguel@mrbug.es'
};
var usuarios = [ yunior, miguel ];
Objetos
var usuarios = [
{
nombre : 'Yunior',
edad : 23,
email : 'yunior@getinko.com'
},
{
nombre : 'Miguel',
edad : 35,
email : 'miguel@mrbug.es'
}
];
Objetos
var usuarios = [
{
nombre : 'Yunior',
edad : 23,
email : 'yunior@getinko.com'
},{
nombre : 'Miguel',
edad : 35,
email : 'miguel@mrbug.es'
}
];
usuarios.forEach( function ( user ) {
console.log(`El usuario ${user.nombre}
tiene ${user.edad} años`);
});
Despacito

EJERCICIO
Crea una variable llamada pizza dónde vamos a almacenar una pizza.
Esta pizza:
- Se llama 'Pizza Margarita'
- Además todas las pizzas en nuestra pizzería tienen un tamaño que puede ser 'S', 'M' o 'XL', esta pizza que vamos a crear es de tamaño M.
- Su precio es de 15'50€
Muestra en consola un mensaje que describa la pizza.
EJERCICIO
Ahora preguntale al usuario que pizza quiere comprar. Deja que introduzca el nombre que quiera, que luego introduzca un valor del tamaño de la pizza (pídele que sea S M o XL) y por último, crea una pizza con esas dos carácteristicas y con uno de estos precios según el tamaño:
Si escogió S valdría 7,50€
Si escogió M valdría 12€
Si escogió XL valdría 17€
Por último muestra un mensaje en la consola como en el anterior ejercicio
Solución
//// SOLUCION 1
var nombrePizza = prompt('¿Nombre?');
var tamanioPizza = prompt('¿Tamanio? (S, M , XL)');
if (tamanioPizza == 'S'){
var precio = 7.50;
}else if (tamanioPizza == 'M'){
var precio = 12;
}else if (tamanioPizza == 'XL'){
var precio = 17;
}
var pizza = {
nombre : nombrePizza,
precio : precio,
tamanio : tamanioPizza
}
console.log(`La pizza con nombre ${pizza.nombre}
y tamanio ${pizza.tamanio} vale ${pizza.precio}`);
// SOLUCION 1 FINALIZADA
// SOLUCION 2
var nombrePizza = prompt('¿Nombre?');
var tamanioPizza = prompt('¿Tamanio? (S, M , XL)');
var pizza = {
nombre : nombrePizza,
tamanio : tamanioPizza
}
if (pizza.tamanio == 'S'){
pizza.precio = 7.50;
}else if (pizza.tamanio == 'M'){
pizza.precio = 12;
}else if (pizza.tamanio == 'XL'){
pizza.precio = 17;
}
// SOLUCION 2 FINALIZADA
// SOLUCION 3
var pizza = {
nombre : prompt('¿Nombre?'),
tamanio : prompt('¿Tamanio? (S, M , XL)')
}
if (pizza.tamanio == 'S'){
pizza.precio = 7.50;
}else if (pizza.tamanio == 'M'){
pizza.precio = 12;
}else if (pizza.tamanio == 'XL'){
pizza.precio = 17;
}
// SOLUCION 3
// SOLUCION 4 LOCA DE TOMAS. PREGUNTAR A TOMAS@GMAIL.COM
var pizza = {
nombre : prompt('¿Nombre?'),
tamanio : prompt('¿Tamanio? (S, M , XL)'),
precio : (pizza.tamanio == 'S')? 7.50 : ((pizza.tamanio == 'M')? 12: 17);
}
// SOLUCION 4 FINALIZADA LOCA DE TOMAS. PREGUNTAR A TOMAS@GMAIL.COM
EJERCICIO
Usa el siguiente array de pizzas
var pizzas = [
{
name : 'Margarita',
size : 'S',
price : 4.50
},{
name : 'Marinera',
size : 'S',
price : 5.50
},{
name : 'Margarita',
size : 'M',
price : 7.50
}
]Recorre el array de las pizzas y muestra un mensaje descriptivo para cada una de ellas.
EXTRA: al terminar, muestra un mensaje que diga, el precio total de las 3 pizzas es de 'XX.XX euros'

Último apunte
Hay una cosa muy importante que se llaman o bien "los bloques" o "los entornos" o "el scope"
Cuando creamos una variable o definimos una función, solo puede ser usada en su entorno o en un entorno interior a él
Entornos
var barbacoa = 'Pizza Barbacoa';
function comerPizzas(){
var piña = 'Pizza con piña';
console.log(`Me puedo comer la ${barbacoa}`);
console.log(`Me puedo comer la ${piña}`);
}
function otra () {
// console.log(`Me puedo comer la ${piña}`); XX ¡ BOMB !
console.log(`Me puedo comer la ${barbacoa}`);
}Extra: Entornos
var barbacoa = 'Pizza Barbacoa';
function comerPizzas(){
var piña = 'Pizza con piña';
if (true) {
var huevo = 'Pizza con huevo';
console.log(`Me puedo comer la ${barbacoa}`);
console.log(`Me puedo comer la ${piña}`);
console.log(`Me puedo comer la ${huevo}`);
}
console.log(`Me puedo comer la ${barbacoa}`);
console.log(`Me puedo comer la ${piña}`);
console.log(`Me puedo comer la ${huevo}`);
}
function otra () {
// console.log(`Me puedo comer la ${piña}`); XX ¡ BOMB !
// console.log(`Me puedo comer la ${huevo}`); XX ¡ BOMB !
console.log(`Me puedo comer la ${barbacoa}`);
}JavaScript02
By Yunior González Santana
JavaScript02
Introducción a JavaScript clase 2
- 161