UT03.1 TutorialResumen
UT03.1 TutorialResumen
Para instalar el framework en la página hemos utilizado CDN (Red de distribución de contenidos
en español). En la cabecera de la página importamos las plantillas CSS utilizadas por el
framework.
En la parte final de la página importamos las librerías JavaScript con las funciones de Bootstrap
y los frameworks que necesita para su funcionamiento, jQuery y Popper.
1
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
1. Inicio
Creamos una carpeta denominada js para incluir dos ficheros que nos permita introducir el
código que necesitamos en la página. La idea de tener dos ficheros independientes es separar
el código que puede ser reutilizable entre páginas, del código que depende de la página que
estamos desarrollando.
El siguiente código muestra la importación de código externo, justo después de las librerías de
Bootstrap.
<script src="js/util.js"></script>
<script src="js/home.js"></script>
Tenemos que observar que la forma correcta de hacerlo es utilizando un tag de cierre. El
siguiente código muestra como sería hacerlo de forma errónea utilizando un tag con el cierre
embebido. Podemos ver como el editor marca el error en rojo.
<script src="formaIncorrecta.js"/>
Creamos una función showMessage que mostrará un texto en un elemento concreto de nuestra
página en util.js ya que será reutilizable.
Elegimos un elemento para añadir este identificador, por ejemplo, en la zona de descuento de
la cabecera.
2
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
- Variables de nombre con estilo conocido como camelCase. Comenzamos con minúscula
y cada palabra de la variable la ponemos en mayúscula. Ejemplo
“showMessageInElement”. También deben comenzar por letra.
- Constantes en mayúsculas.
- Nombrado ficheros externos en minúsculas.
- Espacios alrededor de operadores.
let x = y + z;
let values = ["Volvo", "Saab", "Fiat"];
function toCelsius(fahrenheit) {
return (5 / 9) * (fahrenheit - 32);
}
1.3. Comentarios
Dos tipos de comentarios
- En línea: //
- De múltiples líneas: /* */
// Comentario de línea
/*
function toCelsius(fahrenheit) {
return (5 / 9) * (fahrenheit - 32);
}
*/
2. Variables y constantes
Tenemos tres tipos primitivos en JavaScript:
- number
3
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
- string
- boolean
Ejercicio
Podemos cambiar el tipo de una variable tan solo asignando un valor con diferente tipo a la
variable y el intérprete no genera error.
4
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
El código siguiente ejecuta primero la declaración de la variable total, para que en la segunda
pasada se ejecute la invocación de la función showMessage. En ese momento total no tiene
ningún valor, por eso está undifined. El código continua y se le asigna un valor a total y a partir
de ese punto podemos ver su valor por la consola.
showMessage (total);
3. Tipos y operadores
En el siguiente enlace de MDN podemos consultar la referencia de operadores en la versión ES6.
Veamos los más básicos.
https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Expressions_and_Operators
Creamos un nuevo fichero externo denominado 03_operators.js para realizar los ejemplos.
<script src="./js/util.js"></script>
<script src="./js/home.js"></script>
<script src="./js/03_operators.js"></script>
5
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
3.1. Numbers
El operador typeof nos devuelve el tipo de variable que estamos utilizando.
price = 15;
showMessage (price); //15
price = price + 12;
showMessage (price); //27
price = price - 7;
showMessage (price); //20
price = price * 2;
showMessage (price); //40
price = price / 5;
showMessage (price); //8
price = price % 3;
showMessage (price); //2
Un operador que ha sido añadido a ES6 es la potencia (**). Veamos un ejemplo de su uso.
price = price ** 3;
showMessage (price); //8
price = 15;
showMessage (price); //15
price += 12;
showMessage (price); //27
price -= 7;
showMessage (price); //20
6
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
price *= 2;
showMessage (price); //40
price /= 5;
showMessage (price); //8
price %= 3;
showMessage (price); //2
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Operator_Prec
edence#Table
price = 3 + 2 * 2;
showMessage (price); //7
price = (3 + 2) * 2;
showMessage (price); //10
7
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
3.1.5. Precisión
El intérprete de JavaScript no destaca por su precisión a la hora de trabajar con valores en coma
flotante. En el siguiente ejemplo vemos como podemos trabajar con números en coma flotante.
// Precisión
let taxRate = 0.21;
showMessage (price * taxRate); //2.1
Hay ocasiones donde el intérprete pierde esta precisión. Veamos un ejemplo.
price = 20 - -2;
showMessage (price); //22
3.2. String
Para declarar un string podemos utilizar tanto comilla doble como comilla simple.
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String
Por último, podemos crear un string utilizando comillas invertidas, que además nos ofrece la
posibilidad de obtener el valor de una variable utilizando la notación ${variable}. Veamos
un ejemplo.
8
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
message = `Mantener
saltos
de línea
sin carácter
de escape.
`;
console.log (message);
3.3. Boolean
Las variables boolean admiten valores true o false, pudiendo utilizar el operador unario de
negación (!) para cambiar su valor.
changed = undefined;
showMessage (changed); //undefined
console.log (changed); //undefined
Un valor null indica que la variable ha sido a un valor específico que indica que es nulo, pero
la variable si que tiene valor. En el ejemplo, un valor es transformado a string como una cadena
vacía.
changed = null;
showMessage (changed); //
console.log (changed); //null
let computer1 = {
brand: 'HP',
model: 'EliteBook',
memory: 16,
SSD: 2,
discounted: true,
price: 2000
}
La variable de un objeto por si solo solamente apunta a una dirección de memoria. Para acceder
a sus propiedades debemos utilizar la notación punto. En el ejemplo vemos como el acceso a la
variable nos muestra un texto indicando que se trata de un objeto, y por último podemos
acceder al valor de una propiedad determinada.
4. Flujo de programa
Creamos un fichero 04_flow.js para realizar los ejemplos y lo importamos en la página.
10
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
<script src="./js/util.js"></script>
<script src="./js/home.js"></script>
<script src="./js/03_operators.js"></script>
<script src="./js/04_flow.js"></script>
if (true){
showMessage (true); // true
} else {
showMessage (false);
}
La siguiente tabla describe los operadores de comparación que podemos utilizar.
Operador Descripción
Igual (==) Devuelve true si los operandos son iguales.
No es igual (!=) Devuelve true si los operandos no son iguales
Estrictamente igual (===) Devuelve true si los operandos son iguales y del mismo tipo.
También se aplica a objetos.
Desigualdad estricta (!==) Devuelve true si los operandos son del mismo tipo pero no
iguales, o son de diferente tipo.
Mayor que (>) Devuelve true si el operando izquierdo es mayor que el
operando derecho.
Mayor o igual que (>=) Devuelve true si el operando izquierdo es mayor o igual que
el operando derecho.
Menor que (<) Devuelve true si el operando izquierdo es menor que el
operando derecho.
Menor o igual (<=) Devuelve true si el operando izquierdo es menor o igual que
el operando derecho.
Tabla 2 Operadores de comparación
if (5 == "5"){
showMessage(true); //true
} else {
showMessage(false);
}
En el segundo ejemplo no se realiza este casting y por tanto no son iguales.
if (5 === "5"){
showMessage(true);
} else {
showMessage(false); //false
}
11
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
Lo ideal es siempre utilizar el operando estricto para tener no solo los valores, sino los tipos
de las variables también.
if (5 === 5){
showMessage(true); //true
} else {
showMessage(false);
}
Debemos tener en cuenta en las comparaciones de valores en coma flotante que el intérprete
no es preciso en este tipo de comparaciones, porque podríamos obtener resultados que no
esperamos.
if (!0) showMessage("0");
if (!"") showMessage("cadena vacía");
if (!null) showMessage("null");
if (!undefined) showMessage("undefined");
if (!NaN) showMessage("NaN");
let rate = 3;
if (rate === 5){
showMessage("La nota es excelente");
} else if (rate === 4){
showMessage("La nota es muy buena");
} else if (rate === 3){
showMessage("La nota buena");
12
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
rate = 1;
switch (rate) {
case 5:
showMessage("La nota es excelente");
break;
case 4:
showMessage("La nota es muy buena");
break;
case 3:
showMessage("La nota buena");
break;
case 2:
showMessage("La nota es regular");
break;
case 1:
showMessage("La nota es muy mala");
break;
default:
showMessage("La nota es pésima");
}
La sentencia break permite cortar la ejecución de cada uno de los casos, una vez ejecutado su
código. Siempre debemos añadir una sentencia default para indicar un caso por defecto en
la comparación.
13
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
rate = 2.5;
if (rate >= 2 && rate <= 4){
showMessage("La nota está entre 2 y 4");
}
rate = 4.5;
price = 2001;
if (rate < 4 || price > 2000){
showMessage("Mala relación calidad precio");
}
Podemos anidar los operadores lógicos tanto como sea necesario.
rate = 4.5;
price = 1900;
if (!(rate < 4 || price > 2000)){
showMessage("Buena relación calidad precio");
}
Hay veces que la expresión de lógica que estamos utilizando puede difícil de entender. Podemos
simplificar una negación global por una equivalente negando los operandos individualmente, y
alternando and por or y viceversa. En el siguiente código vemos que un producto con buena
relación calidad y precio su ratio no puede ser menor de 4 y su precio no puede ser menor de
2000, siendo equivalente a la del ejemplo anterior.
rate = 4.5;
price = 1900;
if (!(rate < 4) && !(price > 2000)){
showMessage("Buena relación calidad precio");
}
La siguiente tabla muestra expresiones equivalentes entre si utilizando operadores lógicos de
negación globales.
14
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
Este tipo de expresiones la podemos utilizar en una sentencia para ejecutar código
condicionalmente. En función de la expre1, podemos ejecutar expre2. Veamos un ejemplo. Solo
se invoca la función en el caso de que expre1 sea true.
4.6.2. Ejemplo de or
Devuelve expre1 si se puede convertir a true; de lo contrario, devuelve expre2.
price = 15;
(price >=10) ? showMessage ("Por encima") : showMessage ("Por debajo");
También se puede utilizar en asignaciones.
if (true) {
let value1 = "Valor interno 1";
showMessage (value1);
}
Si quisiéramos acceder desde fuera del bloque del condicional a la variable, el intérprete genera
un error indicando que la variable no está definida.
console.log(value1);
Si utilizasemos la sentencia var, el ámbito de esta variable se mantiene fuera del bloque.
if (true) {
var value2 = "Valor interno 2";
showMessage (value2);
}
console.log(value2); // Varlo interno 2
15
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
1. Definición de variables.
2. Condición de salida.
3. Incremento de variables.
El siguiente ejemplo muestra un bucle que incrementa la variable i de uno en uno mientas su
valor es menor de 5.
let i = 4;
while (i > 0){
console.log ("i: " + i); //4, 3, 2, 1
--i;
}
Debemos darnos cuenta, que en este caso concreto la variable de control del bucle quedaría
disponible fuera del bloque del bucle.
El número de veces que se puede iterar sobre el bloque de un bucle while es 0 o más veces.
let j = 4;
do {
16
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
5. Funciones
Para implementar los ejercicios creamos el fichero 05_function.js y lo importamos en la página.
<script src="./js/util.js"></script>
<script src="./js/home.js"></script>
<script src="./js/03_operators.js"></script>
<script src="./js/04_flow.js"></script>
<script src="./js/05_function.js"></script>
function getCode(value){
let code = value * 12;
return code;
}
showMessage (getCode(11)); //132
showMessage (code);
Sin embargo, desde dentro de una función podemos acceder a variables definidas en ámbitos
externos a la función. En el siguiente ejemplo tenemos una variable externa a nivel global que
podremos utilizar en el interior de nuestra función.
Como podemos ver en este ejemplo, tenemos dos variables declaradas con el mismo nombre,
param2, una interna y otra global. Al referenciar una variable el intérprete busca primero la
declaración en el ámbito local, y en caso de no encontrarla lo hace en el externo.
function getKey(){
let param2 = 12;
console.log ("Param2 en f unción interna: " + param2); //12
return param2;
}
6. Arrays
Para trabajar los arrays vamos a crear un fichero 06.array.js y lo tendremos que importar en la
página HTML.
<script src="./js/util.js"></script>
<script src="./js/home.js"></script>
<script src="./js/03_operators.js"></script>
<script src="./js/04_flow.js"></script>
<script src="./js/05_function.js"></script>
<script src="./js/06_array.js"></script>
18
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
showMessage(lettersAndNumbers[2]); // c
Si accedemos a un elemento del array que no está definido obtenemos undefined.
showMessage(lettersAndNumbers[20]); // undefined
Si queremos añadir un nuevo elemento al array lo podemos hacer utilizando la propiedad
length.
lettersAndNumbers[lettersAndNumbers.length] = 'e';
showMessage(lettersAndNumbers); // a,1,c,2,e
Por último, si asignamos un elemento más allá del tamaño de un array, el resto de posiciones se
autoasignan con valore undefined.
lettersAndNumbers[7] = 'z';
showMessage(lettersAndNumbers); // a,1,c,2,e,,,z
19
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
letters.unshift('a', 'a');
showMessage(letters); // a,a,b,c,d,e,f,g
El siguiente ejemplo añade en el array a partir de la posición 1, tres elementos sin eliminar
ningún elemento previo.
showMessage(newLetters.indexOf('c')); // 2
Si el dato no se encuentra, el método devuelve -1.
showMessage(newLetters.indexOf('d')); // -1
El método indexOf realiza la búsqueda desde el inicio del array. Si queremos buscar
empezando por el final tenemos el método lastIndexOf.
showMessage(letters.indexOf('a')); // 0
20
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
showMessage(letters.lastIndexOf('a')); // 1
Esta función, aunque puede recibir más parámetros, como mínimo debe declarar uno que
obtendrá como argumento el elemento con el que ha sido invocada. En el ejemplo este
parámetro es item.
7. Objetos
Creamos el fichero 07_object.js para contener los ejemplos y lo importamos en la página.
<script src="./js/util.js"></script>
<script src="./js/home.js"></script>
<script src="./js/03_operators.js"></script>
<script src="./js/04_flow.js"></script>
<script src="./js/05_function.js"></script>
<script src="./js/06_array.js"></script>
<script src="./js/07_object.js"></script>
7.1. Propiedades
Ya hemos visto la sintaxis de creación de nuestros propios objetos con un formato literal que
consiste en definir las propiedades del objeto con sus valores. Aunque todavía no lo hemos
trabajado, las propiedades podrían ser nuevos objetos o un array.
let computer2 = {
brand: 'HP',
model: 'EliteBook',
21
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
memory: 16,
hardDisks: {
SSD: [1024],
HDD: [2048,1024]
},
discounted: true,
price: 2000
}
Para acceder o modificar las propiedades utilizamos la notación punto.
7.2. Métodos
Un método es una propiedad que tiene asociada una función. Desde los métodos podemos
acceder o modificar el resto de las propiedades del objeto mediante la palabra reservada this,
que representa el propio objeto.
let computer3 = {
brand: 'HP',
model: 'EliteBook',
memory: 16,
hardDisks: {
SSD: [1024],
HDD: [2048,1024]
},
discounted: true,
price: 2000,
showInfo: function(){
return this.brand + " " + this.model + " (" + this.memory + "GB)";
}
}
showMessage (computer3.showInfo()); //HP EliteBook (16GB)
22
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
value = 12345;
console.log("Valor después del cambio: " + value); //12345
}
let value = "abcde";
changeValue (value);
console.log("Valor fuera de la función: " + value); //abcde
Los objetos son pasados por referencia a una función, es decir, el parámetro recibe como
argumento la dirección de memoria donde se encuentra almacenado el objeto, por tanto, cada
cambio que hagamos en el objeto se hará directamente en dicha dirección, quedando el cambio
permanente en el dato.
function changeComputer(computer){
computer.brand = "Dell";
computer.model = "XPS";
computer.memory = 32;
}
changeComputer(computer3);
showMessage (computer3.showInfo()); //Dell XPS (32GB)
En el fichero util.js añadimos una función que recibe un identificador de un elemento, para
añadirle un borde rojo a ese elemento.
setRedBorderInElement('message');
El objeto classList de un objeto DOM contiene la lista de clases CSS aplicadas al objeto
DOM. Su método contains nos indica si una clase determinada forma parte de la lista, y los
métodos remove y add permite eliminar y añadir clases a la lista respectivamente.
En la página HTML, buscamos el enlace con texto “ver artículo”, que tiene forma de botón. Le
añadimos un identificador que nos permita acceder al objeto DOM.
En el listener vamos a chequear si elemento categories tiene aplicada la clase d-none. Si la tiene
la eliminamos y si no la tiene la añadimos. Cambiaremos el texto del botón para que el usuario
sea consciente de cuál será la acción que se producirá al cliquear en el botón.
if (categories.classList.contains("d-none")){
categories.classList.remove("d-none");
button.textContent = "Ocultar categorías";
} else {
categories.classList.add("d-none");
button.textContent = "Mostrar categorías";
}
});
24
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
8. Ámbitos
Creamos e importamos el fichero 08_scope.js.
<script src="./js/util.js"></script>
<script src="./js/home.js"></script>
<script src="./js/03_operators.js"></script>
<script src="./js/04_flow.js"></script>
<script src="./js/05_function.js"></script>
<script src="./js/06_array.js"></script>
<script src="./js/07_object.js"></script>
<script src="./js/08_scope.js"></script>
const APP = {
computerId: 9876,
userName: "pablo",
profile: "admin"
}
function showGlobalInfo(){
showMessage (APP.computerId + " " + APP.userName); //9876 pablo
}
showGlobalInfo();
El siguiente código muestra la asignación de una variable sin antes haberla declarado. Lo que
ocurre realmente es que la variable es asignada como una propiedad al objeto window, el cual
representa la ventana del navegador que estamos utilizando, y por tanto es accesible desde
cualquier ámbito de la página o la aplicación.
function strictModeExample(){
25
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente
UT03.1: Tutorial y resumen JavaScript
categoryId = 123456;
showMessage(window.categoryId);
}
strictModeExample();
Para solventar este tipo de problemas, utilizamos el modo estricto a través de una directiva al
inicio de una función, para limitar el modo estricto dentro de la función, o en la primera línea
del archivo, para que se aplique a todo su contenido.
function strictModeExample(){
"use strict";
categoryId = 123456;
showMessage(window.categoryId);
}
strictModeExample();
26
Pablo Lizano Montalvo - DAW: Desarrollo Web Entorno Cliente