Computing">
Manual Completo de JavaScript 2021
Manual Completo de JavaScript 2021
JavaScript 2021
Desde Cero
Tiago Nahuel Pujia
Pág. 1
1.5. Array .......................................................................................................59
1.5.1. Definición y Sintaxis .......................................................................................... 59
1.5.2. Métodos ................................................................................................................ 61
1.5.3. Spread Operator en array ............................................................................... 69
1.5.4. Recorrer un array ................................................................................................ 71
1.5.5. .map, .filter y .reduce ......................................................................................... 75
Pág. 2
2.4. Prototipos ........................................................................................... 100
Pág. 3
3.4. BOM ..................................................................................................... 152
3.4.1. Objeto window ................................................................................................. 153
3.4.2. Objeto location ................................................................................................ 157
3.4.3. Objeto history ................................................................................................... 159
3.4.4. Objeto screen ................................................................................................... 160
3.4.5. Almacenar Datos ............................................................................................. 161
Pág. 4
5. Enlaces Externos ........................................................................................ 215
Pág. 5
Pág. 6
1. Conocimientos Básicos
1.1. Fundamentos
Pág. 7
Teniendo en cuenta la información nombrada en la página anterior, hablaremos
ahora sí de las características de JavaScript.
▪ Fue creado en 1995 tras la versión del navegador Netscape 2.0 creado
por la empresa Netsacpe. Su autor Brendan Eich.
▪ JS fue creado para poder utilizar del FrontEnd (lado del cliente). Aunque
hoy en día evoluciono tanto que se considera de uso Universal: BackEnd
(servidor), escritorio, dispositivos híbridos, videojuegos, etc...
Pág. 8
1.1.2. Historia
Para evitar una guerra de tecnologías, Netscape decidió que lo mejor sería
estandarizar el lenguaje JavaScript. De esta forma, en 1997 se envió la
especificación JavaScript 1.1 al organismo ECMA European Computer
Manufacturers Association).
Pág. 9
versiones:
• ES1 – 1997
• ES2 – 1998
• ES3 – 1999
• ES4 – 2000:
• ES5 – 2009
• ES5.1 – 2011:
Así se mantuvieron por mucho tiempo, “Jquery” era el “dios” del
internet en ese momento hasta el 2015, ya no vale la pena
aprender “Jquery”
• ES6 – 2015:
Acá ocurrió un gran cambio se agregaron muchos elementos
nuevos al lenguaje, a partir de acá ya se pusieron de acuerdo y
comenzaron a lanzar versiones como es debido, 1 por año.
• ES7 – 2016
• ES8 – 2017
• ES9 – 2019
Pág. 10
Este lenguaje contiene varias tecnologías, librerías y frameworks que pueden
utilizarse, entre los más populares:
• 2002 – JSON
(JavaScript Objet Notation)
• 2005 – Ajax
Creado por Microsoft, nos permite tener una comunicación con un
servidor externo para traer o enviar datos.
• 2006 – jQuery
La librería más utilizada de JavaScript creada en el 2006. Pero no
recomendable de usar hoy en día, pero si aprender.
• 2009 – [Link]
Marco una nueva etapa de JavaScript que te permitía ejecutar JavaScript
en el servidor, podía conectarse a una base de datos. Se creo un nuevo
termino llamado “JavaScript Full Stack”
Frameworks:
• 2010 – AngularJS
• 2013 – [Link]
• 2014 – [Link]
Pág. 11
1.1.3. Requerimientos Básicos
Nivel de Conocimiento:
Nivel Material:
Pág. 12
1.1.4. Sintaxis
Hay ciertas reglas que se deben de seguir para escribir cualquier script JS, en
cual además ofrece una sintaxis mucho más cómoda a diferencia del resto de
lenguajes.
• Comentarios
Sí hacemos memoria con HTML o CSS, los comentarios permiten desactivar
código sin tener que borrarlo, esto para hacer pruebas o dejar notas.
➢ En línea: //
➢ En bloque: /* */
Ejemplo:
• Punto y Coma
El punto y coma es un clásico en la programación. Esto se coloca al fina de toda
expresión para indicar que finalizo. Esto en JS es opcional siendo que utiliza el
salto de línea para indicar cuando finaliza, sin embargo, lo más recomendado es
utilizarlo por temas de velocidad de código, además que permite escribir más
expresiones en una misma línea.
Pág. 13
• Espacios en Blanco
Los espacios en blanco en JavaScript dan igual, esto quiere decir que se puede
dejar la cantidad de espacios que queramos cada vez que damos un espacio,
con sentido común claro.
Ejemplo:
• Case Sensitive
Hay que tener cuidado a la hora de escribir porque este lenguaje diferencia bien
las mayúsculas y minúsculas.
Pág. 14
1.2. ¿Como Funciona JavaScript?
• Script Externo
Para poder hacer funcionar JavaScript debemos conectarlo con HTML, eso lo
podemos hacer atreves de la etiquete “script”, y dándole una ruta del archivo JS
con el atributo “src”. Ejemplo:
• Script Interno
• Ubicación
Pág. 15
1.2.2. Consola en el Navegador
• [Link]( )
Muestra solo un mensaje, sin clasificarlo.
• [Link]( )
Imprime una representación del objeto con JavaScript.
Por ejemplo: "[Link]([Link])" muestra todos los enlaces en
la página.
• [Link]
Limpia la ventana de la consola
1.2.3. Depuración
Esto trata sobre parar nuestro código en un momento que queramos para
revisar como compila todo el código que estuvimos escribiendo, para arreglar
errores que cometimos.
Para hacer esto debemos escribir en la zona que queremos revisar nuestro
código, la cláusula “debugger”.
Pág. 16
1.2.4. Variables y Constantes
Variables:
La forma moderna de crear una variable es con la cláusula “let” que restringe la
cantidad de veces que puede ser creada a una sola vez. Esta es la diferencia con
la cláusula original llamada “var” además que este tiene un scope global (ya se
hablara de scope).
Para sintaxis para crear una variable es escribir la cláusula “let” seguida de su
nombre y le asignamos un dato con el signo igual “=”. Aunque lo de asignar es
opcional, dejándola vacía para asignar más tarde.
Hay unas normas que seguir: El nombre no puede comenzar con un número, no
puede haber acentos ni espacios entre medias, y solo algunos signos están
permitidos (más común el guion bajo “_”).
Podemos declarar variables separando por comas sin escribir siempre let
muchas veces. Ejemplo:
Constantes:
Estas son muy similares a las variables, la única diferencia es que una vez que es
creada con su dato asignado o no, no puede cambiarse.
Comparte más similitudes con la variable let que var, esto debido a que solo se
puede declarar una vez y el scope se limite a su bloque.
Pág. 17
1.2.5. Tipos de Datos
Nos referimos a tipos de datos como una manera para representar información
básica de la vida a real a la informática. Existen diferentes de datos como texto,
números, vacíos y de más, estos se dividen en 2 categorías: primitivos y
compuestos.
Datos Primitivos
Este tipo son los más sencillos por así decirlo, siendo estos compuestos por un
valor en específico.
Nombre Descripción Ejemplo
Números Un número, claro jaja. Estos se indican 10
escribiéndolos tal cual. Tambien existen “NaN”
que significa “not a number”.
String Una cadena de Texto. Se indica entre comillas “Hola Mundo”
que pueden ser: “ ”, ‘ ’, ` `.
Datos Compuestos
Estos son mucho más complejos y deben ser viste en secciones aparte. Se
diferencian de los otros por ser capaces de contener dentro más de un dato.
Nombre Descripción Ejemplo
array Una lista de datos [‘Hola mundo’, 10, null]
objetos Una lista compuesta por propiedad + {‘nombre’: ‘Tiago’}
valor y métodos
Pág. 18
• Valores Truthy y Falsy
Además, todos los datos pueden traducirse a un Boolean true o false, para esto
deben cumplir ciertas reglas:
• Falsy
• 0
• String vacío
• NaN
• Undefined
• Null
• Truthy
➢ String no vacío
➢ Números diferentes de cero
➢ Arrays
➢ Objetos
Pág. 19
1.2.6. Operadores
Son signos que nos permiten hacer “operaciones”. Los operadores que usan dos
valores son llamados operadores binarios, mientras que aquellos que sólo
toman uno son llamados operadores unitarios.
Operadores Unarios
Estos solo pueden ser utilizados con un solo dato
typeof Nos retorna el tipo de dato que se está evaluando
Ejemplo:
Operadores de Concatenación
Este tipo sirve para unir cadenas de texto
+ Unimos 2 o más cadenas
Ejemplo:
Pág. 20
Operadores Aritméticos
Son los operadores para hacer cuentas matemáticas simples.
+ Suma. Curiosamente el mismo para concatenar
- Resta
/ División
* Multiplicación
% Resto de División
** Potencia de un numero
++ Incrementa un numero
-- Decrementa un numero
Ejemplo:
Pág. 21
Operadores de Asignación
Le asignamos o cambiamos el valor a una variable.
= Asignar o cambiamos un valor a una variable
+= Sumamos un valor a una variable
-= Restamos un valor a una variable
*= Duplicamos un valor a una variable
/= Dividimos un valor a una variable
%= Asignamos el resto de una división
**= Potenciamos un valor a una variable
Ejemplo:
Operadores de Comparación
Estos operadores sirven para comparar 2 datos
== Comprueba si ambos valores son iguales
=== Comprueba si ambos valores y tipo de dato son
iguales
!= Comprueba si ambos valores son distintos
!== Comprueba si ambos valores y tipo de dato son
distintos
< Menor que…
> Mayor que…
<= Menor o igual que…
>= Mayor o igual que…
Ejemplo:
Pág. 22
Operadores Lógicos
! Invierte valor Booleano
&& Significa “y”. Evalúa 2 o más datos, retorna el primer
dato FALSE que consiga
|| Significa “o”. Evalua 2 o más datos, este retornara el
primer dato TRUE valido
Ejemplo:
• Operador Ternario
Estos son comparados con un tema próximo llamado condicionales, por lo que
será un poco complicado de entender.
La sintaxis de este este compuesto por estos 2 signos a continuación del dato
dado:
➢ Si es true: ?
➢ Si es false: :
Ejemplo:
Pág. 23
1.2.7. Números
Ejemplo:
• isNaN( )
Podemos utilizar “isNaN” para comprobar si un dato es un número. Nos
devolverá un boolean.
Ejemplo:
Pág. 24
[Link]. Numero de Decimales (toFixed)
nú[Link](cantidad)
Ejemplos:
Ejemplo:
Pág. 25
[Link]. Convertir texto a número (parse Int y Float)
• parseInt(texto)
• Number(texto)
Transforma un tipo de dato texto a número sin decimales.
Ejemplo:
• parseFloat(texto)
Agregar decimales a la hora de transformarlo.
Ejemplo:
Pág. 26
[Link]. Función Math
Para trabajar con numero tenemos el objeto “Math”. Tiene las siguientes
opciones:
• [Link]( )
Redondea un numero hacia abajo. Ejemplo:
• [Link]( )
Redondea un numero hacia arriba. Ejemplo:
• [Link]( )
Redondea según el valor, si esta superior a .5 redondea hacia arriba y si
es menor redondea hacia abajo. Ejemplo:
Pág. 27
• [Link]( )
Devuelve un numero decimal aleatorio entre 0 y 1.
Podemos utilizar la lógica de multiplicar ese resultado hasta un número
que es en total el número máximo que puede salir. Ejemplo:
Debemos de utilizar el. ceil para que sea capaz de llegar al número 10 y
no salga el número 0.
Para poder hacer que tenga un mínimo debemos restar el valor máximo
con el mínimo, y después en el resultado final sumar el mínimo.
Podemos crear una función propia para utilizar este método de forma
cómoda (ya se explicará después que es una función):
Pág. 28
• [Link]( ) y [Link]( )
Podemos sacar el menor o mayor numero. Ejemplo:
• [Link]( )
Devuelve la raíz cuadrada
Pág. 29
1.2.8. Strings
[Link]. Propiedad
• [Link]
Cantidad de caracteres que tiene el texto. Ejemplo:
Pág. 30
[Link]. Métodos
Existen 3 tipos:
• .trim( )
Quita los espacios en blancos del principio y fin. Ejemplo:
• .toUpperCase( )
Convierte todo el texto en mayúsculas.
• .toLoweCase( )
Transforma todo el texto en minúsculas.
Pág. 31
[Link].2. Encontrar Caracteres
• .indexOf( )
Se utiliza para buscar palabras o letras, nos devolverá el indice que se
encuentra y si no lo está devuelve -1. Ejemplo:
• .lastIndexOf( )
Es como el indexOf pero comienza a contar desde el final. Así que si
queremos el ultimo carácter debemos hacer esto en vez de dar tanta
vuelta como el anterior.
Pág. 32
• .incluides( )
Este en cambio, busca el string dado y devuelve un boolean. Ejemplo:
• .startsWith( )
Pregunta si comienza con determinado texto.
• .endsWith( )
Pregunta si termina con determinado texto.
Ejemplo:
Pág. 33
[Link].3. Manipular Strings
Existen diferentes métodos para hacer transformaciones en los strigs. Esos son:
• .replace( )
Toma un texto y lo remplaza por otro. El primer parámetro es el texto a
buscar, y el segundo por el que será remplazado. Ejemplo:
• .split( )
Se utiliza para separar texto según determinados caracteres que le
demos, esto no devolverá en una lista de datos (array), el separador que
le digamos será eliminando. Ejemplo:
Pág. 34
• .substring( )
Podemos extraer todo el texto a partir de un índice y saltear lo exterior.
Ejemplo:
• .substr( )
el “substr” nos permite sacar extraer una determinada cantidad de
caracteres a partir de determinado índice y darnos el trozo que extrajo.
Primero especificamos el indicé y segundo la cantidad. Ejemplo:
Pág. 35
1.2.9. Alertas e Ingreso de Datos
Estas son funciones (ya veremos que son funciones) que nos permite cierta
interacción con el usuario en pantalla, dándonos una mano mientras tanto.
• alert( )
Como su nombre lo indica, nos saltara una notificación para decirnos algo que
le indiquemos.
Ejemplo:
Pág. 36
• confirm( )
Saltará una alerta con la opción de aceptar y cancelar, nos devolverá un boolean
dependiendo a cuál le de click el usuario.
Ejemplo:
• promt( )
Una alerta con un texto para ingresar aparece en la pestaña. Lo que ingrese el
usuario al input es el dato que nos devolverá el promt.
Ejemplo:
Pág. 37
1.3. Estructura de Control (algoritmo)
Los algoritmos son creados con las estructuras de control, siendo estas las
instrucciones que determinan el flujo de código. Existen distintos tipos, algunas
de esas son las condicionales, ciclos, funciones y switch.
Pág. 38
1.3.1. Condicionales
[Link]. Definición
Una condicional lo que hace es preguntar por una condición, si esa condición se
cumple el código se ejecuta y si esa condición no se cumple el código no se
ejecuta. Así de simple.
• If( ){ }
Con la cláusula “if” creamos una condicional, en que le debemos de dar una
operación que si se cumple se ejecutará el código que contendrá entre las
llaves.
Ejemplo:
Pág. 39
[Link]. Tipos
• En línea
Esta sirve cuando queremos ejecutar código de una sola línea, siendo que no es
necesario escribir las llaves. Ejemplo:
• En bloque
Cuando se tenga que hacer más líneas de código, se hace en un bloque. Para
esto se deben utilizar llaves { } y escribir todo el código ahí. Ejemplo:
Toda variable declarada dentro del bloque no existe fuera de él, pero una
variable declarada fuera del bloque si existe dentro de él. A esto se le dice
maso menos “scope”. Ejemplo:
Pág. 40
[Link]. Con más Condiciones
• else if( ){ }
Si no se cumple la primera condición podemos crear una segunda con un
diferente código. Ejemplo:
• else { }
Esta cláusula se utiliza si no se cumple ninguna de las condicionales. Ejemplo:
Nota: Al cumplir toda la condición, solo tomara al primero… porque lo que hace
el programa es buscar la primera condición verdadera, una vez que
encuentra una condición verdadera la ejecuta y se saltara hasta al final.
Pág. 41
[Link]. Condicional con Múltiples Evaluaciones
Recordemos que tenemos los operadores lógicos para poder crear varias
evaluaciones dentro de una misma condicional.
• &&
Requiere que ambas condiciones se cumplan. Ejemplo:
• ||
Requiere que al menos una condición se cumpla. Ejemplo:
Pág. 42
1.3.2. Switch
Es casi lo mismo que crear un “else if” continuo, pero queda de una manera
mucho más ordenada y cómoda.
Sintaxis:
Pág. 43
Se pueden hacer ejercicios como estos:
Pág. 44
1.3.3. Ciclos
[Link]. for
Pág. 45
[Link].1. Break y Continue
• continue
Hace que se salte una de las iteraciones del ciclo, Saltarte un valor. Ejemplo:
• break
El “break” sirve para romper el ciclo. Ejemplo:
Pág. 46
[Link]. While
• while( ){ }
Seguirá en ciclo mientras la condición que se está evaluando es verdadera,
cuando sea falsa se detendrá.
Ejemplo:
[Link]. Do while
• do{ }while( )
Este bucle es una variante del bucle while. Este ciclo ejecutará el bloque de
código una vez, antes de verificar si la condición es verdadera, luego repetirá el
ciclo mientras la condición sea verdadera.
Pág. 47
1.3.4. Funciones
Una función puede devolver datos que van hacer los datos de entrada de una
segunda función o varias. Así:
input => funcion1 => output1 => funcion2 => output2 => funcion3 =>
output3…
Pág. 48
[Link]. Tipos de declaraciones
• Forma Clásica
Esta es la forma más clásica que esta desde los origines de JavaScript.
Hacemos uso de la cláusula function seguido del nombre, los parámetros entre
paréntesis una llave de bloque donde estarán todas nuestras instrucciones.
Ejemplo:
Recordar que la función debe tener un dato de salida que especificaremos con
la cláusula return.
Pág. 49
• Funciones en Variables
Aunque las llaves son opcionales, pudiendo crear una función de una sola línea
retornando directamente algo. Ejemplo:
Pág. 50
[Link]. Parámetros y Argumentos
Parámetros:
Los parámetros de función son los nombres enumerados en la definición de la
función. Ejemplo:
Argumentos:
Son los valores reales asignados a los parámetros.
Pág. 51
[Link].1. Parametros Rest con Spread Operator
• …
Tiene muchos usos, pero específicamente en este caso lo que nos permite es
mandar cualquier cantidad de argumentos a la función. Hacemos uso de esta en
forma de array.
Ejemplo:
Pág. 52
[Link]. Tipos de funciones
• Funciones Puras
Las funciones puras son aquellas que no causan efectos secundarios, y
siempre devuelve los mismos valores para los mismos parámetros.
Ejemplos:
• Funciones AutoInvocadas
Este tipo de funciones son aquellas que no necesitan ejecutarse dentro
de un paréntesis. Se ejecutan solas. Ejemplo:
Pág. 53
• Funciones Anónimas
Las funciones anónimas no pueden ser nombradas ni llamadas, suelen ser
utilizadas para pasársela como parámetro a otras funciones nativas de JS o
nuestras, que se les llama callbacks (una función pasada a otra función como
parámetro).
Para crear las nombradas no debemos darle un nombre, pero pueden ser
guardados en una variable y tendremos que llamarla como tal. Como las
funciones que guardamos en variables, como las de flechas.
• Nombradas
Las nombradas son aquellas que sí tienen un nombre definido, las que de
variable no cuentan porque la estamos guardando, no la estamos nombrando.
Son las normales.
Pág. 54
[Link]. Scope
Las limitaciones es que una variable creada dentro de un bloque no puede ser
llamada desde el exterior, pero una variable del exterior si puede ser llamada
desde un bloque.
Ejemplo:
Pág. 55
[Link]. This
This se utiliza para indicar que buscar un valor que le pidamos, dentro de su
bloque padre sin tener que ir al scope máximo.
Pág. 56
[Link]. Técnicas
[Link].1. Closures
Ejemplo:
Resultado:
Pág. 57
[Link].2. Recursividad
Ejemplo:
const c = [Link]
const c = [Link]( )
Pág. 58
1.5. Array
• Definición
Un array (o arreglo o matriz) es una lista de valores enumerada compuesto por
datos (string, números, booleans, etc…). Se le llama tipo de dato compuesto
porque tiene la capacidad de almacenar varios diferentes tipos de datos a la
vez.
• Sintaxis
Para crear un arreglo tenemos 2 maneras:
o Array( )
o []
o new Array()
Ejemplo:
• Acceder
Para poder acceder a un valor que contiene un array, debemos utilizar los
corchetes cuadrados e indicar el índice del dato a acceder (recordar que cuenta
a partir de 0). Ejemplo:
Pág. 59
• Modificación Básica
Para cambiar un valor específico del array, debemos llamarlo junto con su índice
e igualarlo al nuevo dato. Ejemplo:
• propiedad
Tiene una propiedad que nos permite saber la cantidad de elementos que tiene
guardado dentro el arreglo. Hacemos uso de “.length”:
Pág. 60
1.5.2. Métodos
[Link].1. Al final
• .push( )
Podemos agregar un valor más a la lista en el final.
• .pop( )
Quitará el último elemento de la lista, no le debemos dar parámetros
porque será siempre el ultimo.
[Link].2. Al principio
• .unshift( )
Podemos agregar un valor al principio de la lista.
• .Shift( )
Elimina el primer valor de la lista, no hay que darle un parámetro,
siempre será el primero.
Pág. 61
[Link].3. Posicionamiento personalizado
• .splice( )
Lo utilizamos para extraer datos de un arreglo y modificarlo.
La sintaxis es la siguiente:
1. StartIndex
Debemos indicarle el índice de comienzo.
2. quantity
la cantidad de elementos que vamos a eliminar (Si le pasamos 0
no eliminamos ninguno).
3. value
luego los valores a los que vamos a agregar.
Ejemplo:
Pág. 62
• .slice( )
Crearemos un nuevo array donde extraemos los valores de otro sin
modificarlo.
La sintaxis es la siguiente:
.slice(start[end])
1. Start
Debemos indicarle de donde comienza a extraer del array
2. End (opcional)
Debemos indicarle donde termina de extraer
Ejemplo:
Pág. 63
[Link]. Ordenar elementos de un array
• .reverse( )
Invierte toda la lista de elementos
Pág. 64
• .sort(callback)
Con este elemento, podemos ordenar las palabras por abecedario de
mayor a menor, Ejemplo:
[Link]((a,b) => a - b)
Pág. 65
Explicación:
Pág. 66
[Link]. Unir arrays, transformar a Strings
• .Join(“ ”)
Con Join podemos unir los valores del array a string, debemos indicar
porque será remplazado los separadores, como por ejemplo espacios.
Ejemplo:
• .concat( )
Se utiliza para poder unir 2 o más array en uno solo, debemos escribir la
variable. Ejemplo:
Pág. 67
[Link]. Encontrar elementos en un array
• .indeOf(value)
Podemos encontrar el índice de un valor de array, si no encuentra
ninguno nos devolverá -1. Ejemplo:
• .find(Callback)
Recibe un callback (Una función) y el primer elemento que coincida con
el callback no los entrega. Ejemplo:
• .findIndex(Callback)
El “findindex” es igual que indeOf y find. Le debemos dar un callback y
nos devolverá el índice del primer valor que coincida. Ejemplo:
Pág. 68
1.5.3. Spread Operator en array
Pág. 69
[Link]. Objeto Math con arrays
Si queremos sacar el mayor o menor número de un array con Math (Se vio en
los operados de números) en un array, nos dará NaN.
Los Math no reciben arrays, ellos necesitan una lista de parámetros sin los
corchetes, Debemos utilizar antes como “eliminar elementos duplicados” los 3
puntos. Ejemplo:
Pág. 70
1.5.4. Recorrer un array
• for( )
Podemos utilizarlo como una técnica para recorrer un arreglo. Ejemplo:
Pág. 71
• for of
La sintaxis es la siguiente:
Primero creas una variable dentro que guardara un elemento que del
arreglo que cambiara en cada ciclo, e indicamos “of” y el arreglo a
recorrer.
Pág. 72
• .forEach( )
El forEach es un método y lo utilizamos cuando queremos darle una
función a cada elemento. Sintaxis:
Con esta sintaxis podemos sacar el índice de cada elemento por ciclo
Ejemplos:
Pág. 73
• .some( ) y .every( )
Podemos utilizar estos métodos si quisiéramos saber si un elemento o
todos los elementos de la función cumplen con una condición, en vez de
hacer una iteración tan larga e incómoda con if, forEach, etc…
1. Elemento
2. Índice del Elemento
3. Arreglo entero pasado
Podemos utilizar some para buscar si un valor coincide con el que le
demos, le tenemos que dar un callback. Ejemplo:
La diferencia con every es que pide que todos los elementos del array
cumplan con la condición. Ejemplo:
Acá le estamos diciendo si todos los elementos del array tienen al menos
la letra que le demos.
Nota: Los métodos some y every no recorren todo el array. El método some se
detiene cuando al menos un elemento del array cumple la condición y el
método every se detiene en el primer elemento que no cumpla la
condición.
Pág. 74
1.5.5. .map, .filter y .reduce
Estos 3 elementos son métodos muy utilices que nos permite manipular los
arreglos de forma sencilla. Estos 3 métodos no modifican el array original, crean
un nuevo array los 3, nunca modifican el array original. Salvo en el dom.
[Link]. map
Transforma todos los elementos del array según el callback que le demos. La
función que incluirá puede tener 3 parámetros:
4. Elemento
5. Índice del Elemento
6. Arreglo entero pasado
Ejemplo:
Pág. 75
[Link]. filter
Filtra los elementos que coincidan con la condición que este en el callback. La
función que incluirá puede tener 3 parámetros:
1. Elemento
2. Índice del Elemento
3. Arreglo entero pasado
Ejemplo:
Estamos queriendo obtener todos los valores que sean mayor que 15.
Pág. 76
[Link]. reduce
1. Total
2. Elemento
3. Índice del elemento
4. Arreglo pasado
Un ejemplo sencillo:
Pág. 77
2. Paradigma Orientado a Objetos
Pág. 78
2.1.2. Los 4 pilares
Existen muchos conceptos en POO como las clases u objetos. Sin embargo, hay
4 pilares que forman la base de programación orientada a objetos.
• Abstracción
Cuando hacemos una abstracción, queremos omitir detalles que no son
necesarios para nosotros, y queremos solamente lo que sí es relevante. Este
sería el proceso para definir los atributos y métodos de un objeto.
Podemos realizar una abstracción de una entidad del mundo real. Ejemplo:
Tenemos una persona que tiene tal edad, nombre, nacionalidad, genero,
familia, etc.… pero nosotros solo “abstraemos” lo que nos interesa que
podría ser solo el nombre y edad.
• Encapsulamiento
El encapsulamiento nos permite controlar quien puede ver y utilizar los distintos
módulos internos de nuestro sistema. Sería un sistema de seguridad.
• Herencia
La herencia la utilizamos para compartir código y ahorrarnos código y
optimización. Nos permite heredar las características de una clase padre.
Pág. 79
• Polimorfismo
Proviene de Poli = muchas, morfismo = formas.
Trabaja cuando hay una herencia. Heredar el mismo método, pero modificarlo
para cada objeto que creamos
Pág. 80
2.2. Objetos
2.2.1. Definición
Por ejemplo, tenemos un auto que tiene tal marca, color, peso, caballos de
fuerza, etc… pero solo abstraemos lo que nos interesa, como la marca,
asientos disponibles y caballos de fuerza. Quedando algo así:
Marca: Chevrolet
Asientos: 5
▪ Una diferencia con los arrays seria que estos tienen índice y para llamar a un
dato lo tenemos que indiciar por índice también, mientas que los objetos no
además que nos permite crear clases, uso de JSON y de más que ya veremos.
Pág. 81
2.2.2. Sintaxis
Ejemplo de uso:
Pág. 82
[Link]. Detalles Atributos
▪ No es necesario que lleve comillas a no ser que rompa una regla de las
variables. Ejemplo:
Pág. 83
2.2.3. Métodos
Los métodos es una función de callback que se le pasa como valor a un atributo
de los objetos, tenemos 3 formas diferentes
Lo mejor es utilizar la 2 o 3, debido que nos permite utilizar “this”, vamos a verlo
a continuación.
Pág. 84
2.2.4. this
Pág. 85
2.2.5. Llamado
• Objeto
Para llamar a un objeto lo debemos poner tal cual el nombre de su variable (Si
lo guardamos en una claro). Ejemplo:
• Atributo
Debemos utilizar el punto “.” Y después el nombre del atributo. Ejemplo:
• Métodos
Utilizaríamos la sintaxis de punto. Ejemplo:
Pág. 86
2.2.6. Manipular Objetos
Pág. 87
[Link]. Eliminar Atributo
Pág. 88
2.2.7. Recorrer Objetos con “in”
• in
Es un operador que nos devuelve un boolean sí tiene o no esa propiedad. La
sintaxis seria pasarle primero el nombre del atributo que queremos buscar en el
objeto, en forma de string, después la palabra clave “in” y por último el nombre
del objeto. Ejemplo:
• for in
Es un ciclo que usamos obtener y “hacer algo” con cara atributo. Misma sintaxis
que “for of”. Ejemplo:
Pág. 89
2.2.8. [Link], keys y values
• [Link]( )
Nos devuelve un array, contendrá la entrada (atributo y valor) dentro de un
array, según el objeto que le pasemos como parametro. Ejemplo:
• [Link]( )
Nos dará un array con todos los atributos del objeto que le pasemos como
parámetro. Ejemplo:
• [Link]( )
Entrega la parte opuesta, referenciándose a todos los valores del objeto.
Ejemplo:
Pág. 90
2.2.9. Spread Operator
Este tema también existe para los arrays en cual ya fue visto y explicado.
Hacemos uso de los 3 puntos “…” que aplicaremos delante de la variable con el
dato compuesto.
Ejemplo:
También nos sirve para duplicar datos compuestos sin mutabilidad, al cual será
visto a continuación.
Pág. 91
2.2.10. Mutabilidad
• Datos Inmutables
Los inmutables son los objetos cuyo estado no se puede cambiar una vez
creado el objeto.
• Datos Mutables
Un objeto mutable es un objeto cuyo estado puede modificarse después de su
creación.
Pág. 92
[Link]. Duplicar Datos sin Mutabilidad
Para duplicar datos compuestos sin mutabilidad haríamos uso del spread
operator, liberamos sus ítems en un nuevo ítem que debe de ser el mismo tipo
de dato. Aplicaría a los 2 datos compuestos, arrays y objetos. Ejemplo:
Pág. 93
2.3. Clases
2.3.1. Definición
Bueno, para solucionar estos errores podemos hacer una especie de plantilla o
un patrón en que podamos basarnos, a este concepto se lo llama Clases.
Pág. 94
2.3.2. Crear clases
• class
Utilizamos esta palabra clave, siguiendo del nombre de la clase (Por buena
práctica deben comenzar en mayúscula) y después abrimos unas llaves.
Ejemplo:
Dentro vamos a construir los atributos que necesita, para eso necesitamos una
función constructora y para declararlo utilizaremos:
• constructor( )
Recibe los parámetros que nosotros quisiéramos agregar a un atributo
(Opcional). Después debemos almacenar esos datos en esa instancia, el nombre
del atributo y asignarle el parámetro recibido. Ejemplo:
Pág. 95
Un problema que ocurre cuando instanciamos la clase, es que si no le pasamos
todos los parámetros lo rellenara con “undefined”. Ejemplo:
Para solucionar este problema podemos hacer uso de JavaScript básico, como
predefinir los valores de los parámetros. Ejemplo:
Pág. 96
2.3.3. Métodos
Pág. 97
2.3.4. Herencia
La herencia se utilizar cuando tenemos varias clases parecidas entre sí, para eso
heredamos los atributos de una “clase padre”.
• extends
Se lo debemos poner después del nombre de la clase que creamos junto con el
nombre de la clase a Heredar. Ejemplo:
• super( )
Le debemos pasar como parámetro de los atributos que queramos agregar. Lo
colocamos dentro de la función constructora.
Ejemplo de herencia:
Pág. 98
2.3.5. Llamar Clases
• new
Con “new” declaramos que estamos creando una nueva instancia de una clase,
le debemos pasar como parámetros los valores de los atributos que creamos
antes. Si lo llevamos a consola seria así:
Pág. 99
2.4. Prototipos
Lo primero que hay que saber es que en JavaScript casi todo es un objeto, y que
JS está basado en prototipos.
Para que pueda proporcionar herencia a través de cada objeto que contiene un
objeto prototipo. El objeto prototipo podría contener la referencia al objeto del
cual se deben heredar los métodos y las propiedades. Además, cada objeto
prototipo contiene un objeto prototipo que puede heredar aún más los
métodos y propiedades. Esto se conoce como una cadena de prototipo.
[Link]/en-US/docs/Learn/JavaScript/Objects/Object_prototypes
[Link]
[Link]
[Link]
Pág. 100
2.5. JSON
Un uso serio que se usa para transferir información entre un servidor y cliente.
Antes de JSON se utilizaba XML, pero este resulto ser mucho más sencillo,
rápido y eficiente.
Su formato es similar a los objetos literarios de JS, JSON entiende los números y
arrays, por lo general se suele comenzar con un array.
Pág. 101
3. Aplicar Lenguaje al DOM
3.1. Introducción
3.1.1. DOM
Una página web es un documento, incluso no los dice al principio de este con
“doc-type”. El DOM está basado en el paradigma POO, así que cada Nodo (Item
del DOM, por ahora) es un objeto que representa cada parte del documento y
puede ser manipulada mediante JS.
La columna vertebral de este son las mismas etiquetas como ya se dijo, al cual
son unos hijos de otro formando una especie de árbol.
Pág. 102
3.1.2. Nodos
Hay diferentes tipos de nodos, existen 12 en total, pero solo serán visto
los más vistos, además que algunos están obsoletos, cada uno además tiene un
valor número y un nombre:
➢ Etiqueta | ELEMENT_NODE |1
➢ Atributo | ATRIBUTTE_NODE |2
➢ Texto | TEXT_NODE |3
➢ Comentario | COMMENT_NODE |8
• $0
Podemos seleccionar un nodo yendo a las herramientas de desarrollador y
clickeando un nodo, después en la consola ejecutamos “$0” y nos devuelve el
nodo.
• .nodeType
Con esta propiedad nos devolverá el tipo de nodo. Ejemplo:
• .nodeName
Es otra propiedad que nos dará el nombre correspondiente del nodo
seleccionado. Ejemplo:
Pág. 103
3.1.3. Selectores
• [Link]( )
Lo utilizamos para seleccionar etiquetas solo por ID y solo uso. Debemos
pasarle como parámetro un string con el nombre del ID tal [Link] que se utiliza
en JavaScript para manipular el DOM son mayorialmente los ID. Es la mejor
forma para seleccionar por ID, incluso por las siguientes. Ejemplo:
• [Link]( )
Es un selector global, esto quiere decir que lo utilizamos para seleccionar por
clase, tag, id, atributos, etc… Recibe un string con un selector que veremos a
continuación. Es un selector individual, así que si hay muchos solo escoge el
primero.
• [Link]( )
Es el mismo selector que el anterior, pero la diferencia es que agarra todos los
elementos que puede y no solo uno. Le debemos pasar un string con un
selector variado que veremos a continuación.
Pág. 104
El “document” significa que lo estamos buscando en el documento HTML en el
que nos encontramos (No la etiqueta “html”), nos es el Nodo más alto tiene
hermanos e incluso padre.
Pág. 105
[Link]. Básicos
➢ . | Clase
➢ # | ID
➢ [] | Atributo
➢ | Etiqueta (sin signo)
➢ * | Universal
➢ , | Múltiple
Pág. 106
• ID
Usamos un hash con el nombre del selector para los id. Ejemplo:
• Clases
Tendrá que comenzar con un punto “.” y después el nombre de la clase.
Ejemplo:
• Etiquetas
Tendríamos que poner el nombre de la etiqueta sin cierre y abertura. Ejemplo:
Pág. 107
• Universal
Selecciona todas las etiquetas que hay en un elemento especificado, o si lo no
hacemos selecciona todos los que hay en el DOM. Ejemplo:
• Múltiples
Podemos seleccionar varias etiquetas dentro de una variable en JS, se debe
dejar una coma “,” entre cada selector. Debemos utilizar si o si el
“querySelectorAll”. Ejemplo:
Pág. 108
• Atributos
Hacemos uso de los corchetes cuadrados “[ ]”, dentro podemos pasarle solo el
nombre del atributo y nos selecciona todos los que tengan ese tal atributo,
también le podemos pasar un valor como en HTML y seleccionara todas las
etiquetas que tengan tal atributo y valor. Ejemplo:
También tenemos una notación para filtrar atributos, debemos agregar un signo
antes del igual:
Pág. 109
[Link]. Jerarquía
• Hijo directo
Utilizaríamos el mayor-menor “>”, lo usamos para buscar una etiqueta dentro
de otra etiqueta (Hijo), pero no busca en los nietos. Ejemplo:
HTML:
Selecciono todos los div hijos de la clase “padre”, quiere decir todos los divs con
la clase “hijo”.
Pág. 110
• Hermanos siguientes
Seleccionamos el hermano de un elemento y debemos utilizar “~”. Ejemplo:
HTML:
Pág. 111
• Descendencia
Buscamos elementos que se encuentra directamente en su descendencia,
incluyendo hijos y nietos... Esto lo hacemos dejando un espacio vacío entre los
elementos. Ejemplo:
HTML:
Pág. 112
[Link]. Filtrados
• :first-child
Selecciona los elementos que son el primer hijo de su padre. Ejemplo:
• :last-child
Sería lo opuesto a “:first-child”. Selecciona todos los elementos que son el
ultimo hijo de su padre.
Pág. 113
• :first-of-type
Selecciona todos los elementos que son el primer hijo y diferente de su padre.
Ejemplo:
HTML:
• :last-of-type
Selecciona el ultimo ítem de sus hermanos del mismo tipo. Opuesto a “first-of-
type”.
Pág. 114
• :nth-child( )
Podemos seleccionar elementos específicos en un patrón que queramos o un
elemento en concreto.
Pág. 115
Elementos pares e impares:
Puede ser usado también para seleccionar elementos pares con “even”, o
impares con “odd” pasándolo como parámetro.
➢ even | Pares
➢ odd | Impares
Ejemplo:
HTML:
Pág. 116
Patrón personalizado:
Seleccionamos ítems en un orden especifico que le pasemos, por ejemplo,
queremos que cada 4 ítems nos seleccionen uno. Puede recibir 3 parámetros (1
opcional):
:nth-child(An+B)
1. A | Tamaño de pasos
2. n | Indicar que es un patrón personalizado
3. B | Pasos desplazados [Opcional]
Ejemplo 1:
Ejemplo 2:
Recordad que los elementos pares son igual a 2n y los impares a 2n+1
even = 2n
odd = 2n+1
Pág. 117
• :nth-last-child( )
Sería prácticamente lo mismo que nth-child aplica las mismas reglas, pero en
vez de contar desde el primer elemento comienza en el último. Ejemplo:
Pág. 118
3.1.4. DOM Traversing
Pág. 119
[Link]. Hijos
• .childNodes
Nos devuelve todos los nodos hijos, pero no los nietos. Ejemplo:
• .children
Nos devuelve todas las etiquetas hijos, pero no nietos. Ejemplo:
• .firstChild
Devuelve el primer nodo que encuentra en el elemento seleccionado
Pág. 120
• .firstChildElement
Nos devuelve el primer elemento.
• .lastChild
Nos devuelve el ultimo nodo que encuentre.
• .lastElementChild
Nos devuelve el último elemento.
• .hasChildNodes( )
Nos devuelve un boolean si el elemento seleccionado tiene almenos un nodo
dentro.
Pág. 121
[Link]. Hermanas
• .nextSibling
Devuelve el nodo hermano siguiente.
• .nextElementSibling
Devuelve el elemento hermano siguiente.
• .previousSibling
Devolverá el nodo hermano anterior.
• .previousElementSibling
Nos dará el anterior elemento hermano que seleccionamos.
Pág. 122
[Link]. Padres
• parentNode
Llama el nodo padre que seleccionamos.
• parentElement
Llama al elemento padre que seleccionamos.
Pág. 123
3.2. Manipular DOM
3.2.1. NodeList
• [Link]( )
Utilizamos este método del objeto “array”, para transformar el NodeList a un
arreglo, y poder hacer todas las interacciones de este.
Pág. 124
3.2.2. Contenido Nodos
[Link]. Etiquetas
• .textContent
Con esta propiedad podemos sacar el contenido texto que se encuentra en la
etiqueta. Solo texto no las etiquetas hijos, pero si el texto de estas.
• .innerHTML
Nos devuelve todos los nodos Etiquetas con sus atributos y Texto, incluyendo a
todos sus hijos y nietos.
• .outerHTML
Recibimos todo el elemento completo con sus atributos, etiquetas y texto de si
mismo.
Pág. 125
[Link]. Atributos
• .getAttribute( )
Debemos seleccionar una etiqueta, después pasarle un string con el nombre del
atributo que queremos que nos devuelva como valor. Ejemplo:
• .setAtributte( )
Asignamos un nuevo atributo o modificamos el valor de uno ya preexistente,
seleccionamos primero el elemento y luego le pasamos como parámetro a este
método:
1. Atributo
2. Valor
Ejemplo:
Pág. 126
Hay otra manera más sencilla para asignar u obtener un atributo.
Pág. 127
[Link]. Clases
• .classList
Nos devuelve un arreglo con las clases asignadas del elemento que
seleccionamos.
• .[Link]( )
Estamos agregando una nueva clase al elemento seleccionado, debemos
pasarle un string con el nombre de este, y podemos pasarle cuantos parámetros
queramos. Ejemplo:
• .[Link]( )
Removemos clases que contiene el elemento seleccionado. Debemos pasarle un
string con el nombre de la clase, se lo pasamos como parámetro y la cantidad
que queramos. Ejemplo:
• .[Link]( )
Elimina o agrega una clase dependiendo el caso. Sí ya la tiene la elimina, sí no la
tiene la asigna. Nos devuelve un boolean indicando si se agregó o elimino.
Pág. 128
3.2.3. Insertar Nodos
• .before( )
Hermano anterior.
• .after( )
Hermano siguiente.
• .prepend( )
Primer hijo.
• .append( )
Ultimo hijo.
Ejemplo:
Pág. 129
3.2.4. Crear Etiquetas
• [Link]( )
Debemos pasarle el nombre del tag que queremos crear en forma de string.
Ejemplo:
Pág. 130
• [Link]( )
Un error de rendimiento es cuando tenemos muchos elementos creados y los
vamos insertando en el documento 1 por 1, esto es algo negativo al cual le
cuesta mucha labor al DOM.
Los que nos permite esto es almacenar todos esos datos y pintarlos todos
juntos a la vez cuando estén listo, y no dibujarlos en el documento 1 por 1.
Aumenta notablemente el rendimiento del programa.
Pág. 131
3.2.5. Eliminar, Remplazar y Clonar
• .remove( )
Podemos eliminar nodos completamente incluyendo a toda su descendencia,
no recibe ningún parámetro. Ejemplo:
Sí quisiéramos eliminar todos los hijos y dejar la etiqueta vacia, podríamos hacer
uso de “innerHTML” y darle valor vacío. Ejemplo:
• .replaceWith( )
Remplazamos todo el “outerHTML” del nodo que seleccionamos, y le pasamos
como parámetro el nuevo nodo. Ejemplo:
Pág. 132
• .cloneNode( )
Duplicaremos un nodo y será guardado en memoria al cual debemos insertar en
algún lugar donde queramos. Recibe un parámetro boolean al que si es true
incluirá también a todos sus elementos hijos. Ejemplo:
Pág. 133
3.2.6. Etiqueta Template
Pág. 134
3.2.7. CSSSOM
Pág. 135
• getComputedStyle( )
Nos devuelve un objeto con todos los estilos calculados del elemento que le
pasemos como parámetro. Ejemplo:
• .style
Permite modificar el valor de un estilo del elemento que seleccionamos. La
sintaxis seria seleccionar el elemento, utilizar la propiedad “style” y ahí agregar
el estilo CSS que queremos modificar. Ejemplo:
Pág. 136
3.3. Eventos
Un evento es algo que ocurre en el DOM, puede ser producido tanto por el
usuario como por el mismo programa, el navegador, o el mismo DOM
Pero todas esas cosas que ocurren son los eventos, aunque los eventos que más
se usan son con la interacción del usuario.
La manera más tradicional es darle como atributo a una etiqueta de botón por
lo general (aunque puede ser cualquiera):
• >y pasarle una fusión que se activa cuando se le de click. Ejemplo:
HTML:
JavaScript:
Aunque tiene una sintaxis parecida a los frameworks como angular o react.
Pág. 137
3.3.2. Eventos Modernos
• .addEventListener( )
Recibe 2 parámetros, el primero es el tipo de evento en string, y el segundo es
una función callback que se va a ejecutar cuando ocurra el tipo de evento que le
pasemos. Ejemplo:
También, en vez de poner todas las instrucciones ahí dentro, podemos llamar a
una función externa para que le código este más ordenado. Ejemplo:
• .on + event
Recordemos que en JS todo es un objeto, así que en realidad en los eventos
estamos accediendo a un método y dándole una función. Así que podemos
saltearnos el “addEventListener” y utilizar la sintaxis de “on + event”, debemos
seleccionar un evento, pasarle la sintaxis e igualarlo a una funcion callback.
Ejemplo:
Pág. 138
3.3.3. Mouse
• click
Se ejecuta cuando le demos click a algo.
• dblclick
Se activará cuando le demos doble click rápido a un evento.
• mouseenter
Se activa cuando el mouse entra al área de un elemento.
• mouseleave
Sería lo opuesto, se activa cuando el mouse sale de un área, primero debe
entrar y después cuando salga se ejecutará.
• mousedown
Se ejecuta cuando dejas presionado el click
• mouseup
Se activa cuando sueltas el click. Se utiliza por ejemplo cuando un usuario
arrastra algo.
• mousemove
Se ejecutará cuando el mouse se mueve dentro de un elemento.
Pág. 139
[Link]. Menú contextual
• contextmenu
Captura cuando le demos click pero con el botón derecho, y salta el típico menú
contextual de todos los navegadores, con esto podemos crear uno
personalizado.
o .preventDefault( )
Para que no muestre el menú contextual del navegador usamos este metodo
para el parámetro que recibe la función de callback. Ejemplo:
• layerX | pageX
• layerY | pageY
Ejemplo:
Pág. 140
Con esos valores podríamos crear nuestro propio menú contextual. Ejemplo:
Pág. 141
3.3.4. Teclado
• keydown
Sí se teclea una tecla será activado, incluso cuando la dejas presionada.
• keyup
Se activa cuando se suelta la tecla.
• keypress
Igual que “keydown”, pero ignora unas teclas de control, como “shift”, “fn”, “tab”
o “alt”.
Pág. 142
Podemos saber que tecla le dio el usuario en un input pasándole un parámetro
al callback del evento, este nos devolverá un objeto con información del evento.
Ejemplo:
Pág. 143
3.3.5. Formulario
• submit
Se ejecuta cuando el formulario se envía, entonces quizás quisiéramos saber si
los campos input están correctamente llenados. Debemos seleccionar el
formulario. Ejemplo:
• focus
Ocurre cuando le hacemos click en un input, o cuando le hacemos focus mejor
dicho. Incluyendo también cuando nos movemos mediante el tabulador.
• blur
Es lo opuesto a focus, cuando soltamos el foco de un input
Pág. 144
• reset
Ocurre cuando reseteamos el formulario con el input tipo reset.
• change
Ocurre cuando un input cambia de valor. Por Ejemplo, en un input tipo
checkbox queremos saber si le dio o no al botón de marcado o cuando
selecciona una opción de una etiqueta “select”. Ejemplo:
HTML:
JavaScript:
Pág. 145
• .value
Esto es una propiedad más que un tipo de evento, nos permite sacar los valores
que introduce el usuario en los campos input, al cual le tenemos que agregar
esa propiedad en JavaScript. Ejemplo:
3.3.6. DOM
Pág. 146
3.3.7. Navegador
• load
Es parecido al DOMContentLoaded, con la diferencia de que ocurre cuando
cargue toda la página incluyendo archivos pesados como las imágenes o
peticiones. Se activa después del DOMContentLoaded.
• scroll
Se activa cuando haces scroll en un determinado elemento o el mismo
documento. Ejemplo:
Para saber la posición del scroll debemos pasarle al elemento que se le hace
scroll (this):
➢ scrollX | Horizontal
➢ scrollY | Vertical
• resize
Ocurre cuando redimensionamos la pantalla. Ejemplo:
Pág. 147
3.3.8. Multimedia
Se utilizan para videos y no son eventos en sí, más bien le daremos vamos a ser
un evento de tipo “click” y se ejecutara un método de inicio o pausa del video.
• .play( )
Reproduce el video
• .pause( )
Pausa el video.
Ejemplo:
HTML:
JavaScript:
Pág. 148
3.3.9. Delegación de eventos
Pág. 149
Ejemplo Práctico:
Pág. 150
3.3.10. this
La función de tipo “arrow function” es equivalente al objeto más alto, que sería
en nuestro caso “window”. La función clásica “function”, hacemos referencia a la
etiqueta que le estamos pasando el evento. Ejemplo:
Pág. 151
3.4. BOM
Pág. 152
3.4.1. Objeto window
Todos los objetos en JS vienen del objeto global “window”, así que cuando se ve
una función que en teoría es nativa de JavaScript, estamos accediendo a un
método o propiedad del objeto window.
Pág. 153
Propiedades:
• console
• navigator
• location
• history
Pág. 154
Métodos:
Son métodos ya visto en JS básico, pero se hará un repaso y además serán
agregados otros métodos no vistos.
• alert(mesagge)
• confirm(mesagge)
• promt(mesagge)
También ya se vio anteriormente, manda una alerta con una barra para que el
usuario guarde datos.
• open( )
Nos permite abrir una nueva instancia del navegador y se abrirá con algunos
parámetros
1. URL en string.
2. Un nombre cualquiera.
3. Propiedades CSS, tamaño y altura.
Ejemplo:
• close( )
Sirve para cerrar ventanas pero que únicamente abriste con open( ), es debido a
temas de seguridad.
Pág. 155
[Link]. Timers
• setTimeout( )
Ejecuta lo que está en el callback después de cierta cantidad de tiempo una sola
vez. Ejemplo:
• setInterval( )
Ejecuta las instrucciones repetidas cada X tiempo dado. Ejemplo:
• clearInterval( )
Podemos parar el intervalo de tiempo, le debemos dar un parámetro que será el
intervalo, en cual debe estar dentro de una variable. Ejemplo:
Pág. 156
3.4.2. Objeto location
Propiedades:
• href
URL actual, se puede cambiar para cambiar la página actual. Es de lectura y
escritura. Ejemplo:
• host
Nos devuelve el dominio y puerto. Ejemplo:
Todos los links internos se pusieron de color rojo. Si quisiéramos obtener los
externos le debemos dar a la condicional el operador unario negativo “!” .
Pág. 157
• hostname
Nombre del host.
• port
Puerto
• protocol
Tipo de protocolo.
• origin
Protocolo + dominio.
• hash
Ya sabemos que para usar enlaces internos se usan los hashes #, y podemos
detectar si se encuentra uno con esta propiedad.
• pathname
Ruta interna luego del dominio, o mejor dicho el “path”.
Método:
• reload( )
Recarga la página.
Pág. 158
3.4.3. Objeto history
Propiedad:
• lenght
Única propiedad que nos dice la cantidad de veces que nos movimos en una
misma pestaña, el valor mínimo es 1.
Métodos:
• back( )
Te envía atrás.
• forward( )
Te envía adelante.
• go(position)
Te envía la posición que le indiquemos.
Siendo “1” adelante, y “-1” atras. Podemos ir para atrás o adelante con la
cantidad que queramos. Ejemplo:
Pág. 159
3.4.4. Objeto screen
Propiedades:
• width
Ancho de la pantalla.
• height
Altura de la pantalla.
Pág. 160
3.4.5. Almacenar Datos
localStorage:
Es una manera de almacenar información dentro del navegador y que persista
mientras estas navegando en la página, también sigue existiendo estos datos en
archivos que se encuentra en el path.
Para ver todos los datos que guardamos podemos ir a la consola del navegador
e ir a “Application”, “local storage” o “almacenamiento local”.
sessionStorage:
Tiene las mismas propiedades, métodos y teoría que “localstorage”. Pero tiene
una diferencia:
Pág. 161
Datos Extras:
“localStorage” es un objeto de “window”. Como es un objeto “localStorage”,
podemos asignar, eliminar, manipular toda la información de este en forma de
objeto.
Guardad un localStorage:
• [Link](" ”, “ ”)
Recibe 2 parámetros:
1. Nombre
2. Información en string
Ejemplo:
Recuperar Elemento:
• [Link](“ ”)
• [Link]( )
• [Link]
Pág. 162
Guardar objetos:
No podemos guardar un objeto como tal porque nos dira “[object Object]”.
necesita que este como un string o número. Podemos hacer lo siguiente:
Tenemos un objeto llamado “JSON” (De la jerarquía “window”), que nos permite
múltiples herramientas.
• [Link]( )
• [Link]( )
Eliminar localStorage:
• [Link](“ ”)
• [Link]( )
Pág. 163
[Link]. cookies
▪ Estas son muy livianas y son las que se utilizan para intercambiar
información con un servidor.
▪ Las cookies siempre tienen una fecha de caducidad y son eliminadas por
esta, o el usuario puede ir a configuración del navegador y eliminarlas.
Pág. 164
Crear Cookie:
Tenemos que acceder a “document” y después a “cookie”, la igualamos a un
string, este recibe nombre y valor separado por un igual “=”. Ejemplo:
Fecha de expiración:
Sí no especificamos una fecha, la cookie será eliminada cuando sierre el
navegador o la pestaña.
Pág. 165
Edad máxima:
Le damos un tiempo en segundos de vida antes de que expire. Utilizamos la
clave “max-age”. Ejemplo:
Obtener cookies:
Debemos utilizar simplemente “[Link]” y nos devolverá todas las
cookies con su nombre y valor separados por “;”. Podemos separarlos por split.
Ejemplo:
Eliminar:
Debemos sobrescribir la cookie con el mismo nombre, y darle una fecha de
caducidad pasa a la fecha actual de ese momento, o darle un “max-age” muy
pequeño.
Pág. 166
3.5. Objeto Date
3.5.1. Instancia
• new Date( )
Te dice todos los datos de la hora si lo llevamos a consola. Ejemplo:
• new Date(year,month,day)
Le podemos pasar parámetros para que nos diga la hora del tal día, mes y año.
Ejemplo:
• new Date(year,month,day,hours,minutes,seconds)
Podemos darle más parámetros.
Pág. 167
• new Date(string)
También le podemos dar un string, el string que nos devuelve cundo lo
llamamos. Ejemplo:
3.5.2. Métodos
➢ [Link]( ) | Año
➢ [Link]( ) | Mes
➢ [Link]( ) | Dia del mes en numero
➢ [Link]( ) | Dia de la semana en numero
➢ [Link]( ) | Hora
➢ [Link]( ) | Minutos
➢ [Link]( ) | Segundos
➢ [Link]( ) | Milisegundos
Pág. 168
4. AJAX y WebSockets
4.1.1. Definición
▪ “HTTP” son las siglas “Hyper Text Transfer Protocol”, que en español seria
“Protocolo de transferencia de Hipertexto”.
Por ejemplo, cuando vamos a una cena existe un protocolo como primero
los platos, después los cubiertos, después la comida que debe ingresar
primero, como solicitar más platos, etc…
Pág. 169
▪ Lo que realmente ocurre cuando vemos una página web, es que por dentro
el navegador está haciendo una petición http, mediante internet, a un
servidor web y es este el que devolviendo una respuesta http, nos envía el
HTML, CSS, JavaScript, imágenes, videos, etc (c/u por cada petición) que son
procesador por el navegador dando como resultado final la página web que
vemos:
Pág. 170
▪ Un ejemplo de la comunicación seria:
Petición:
Una petición debe tener como mínimo estos datos:
Iría primero el tipo de método “GET”, después la ruta “/” y por último la
versión del protocolo “HTTP/1.1”
Pág. 171
Respuesta:
Van los headers junto al final su respuesta que puede ser un documento
“HTML”.
Pág. 172
▪ Existe “HTTPS”, la “S” lo que está diciendo es que la información está siendo
entregada por medio de un canal cifrado con un certificado “SSL” pero el
protocolo sigue siendo el mismo.
▪ También están los “proxy”, que son herramientas que nos permite hacer
varios procesos como cachear la información.
ejemplo: Veo que están haciendo muchas peticiones de un mismo archivo
a un servidor y cambia poco, lo que sea hace es cachearlo para que el
servidor tenga que estar leyendo el disco duro constantemente y volverlo
a entregar, entonces el proxy se guarda esos archivos
Filtra información en busca de virus o accesos no permitidos.
Pág. 173
4.1.2. Métodos
Para poder hacer una petición en HTTP, debe venir incluido el tipo de método
para saber qué acción debe realizara el servidor.
Existen muchos métodos en teoría, pero en la práctica los que más usamos son
4 (GET, POST, PUT y DELETE):
• GET
En su traducción seria “obtener”. Cuando ingresamos a una página web estamos
utilizando el método get, como por ejemplo: “[Link] estoy haciendo
una petición al host “[Link]” a la ruta “/” (ósea el inicio)
• POST
Lo usamos cuando enviamos información, como por ejemplo un formulario de
registro.
Pág. 174
• PUT
Lo mejor es utilizarlo para actualizar un recurso o se utiliza para enviar un
formulario como “POST”, pero la diferencia es que “POST” tiene efectos
secundarios y este no.
• DELETE
Borra un recurso que le indiquemos.
• OPTIONS
Nos permite hacer peticiones entre dominios diferentes.
Pág. 175
4.1.3. Código de Estado
Como por ejemplo el más famoso “404” que es un error del cliente porque
intento ir a una página no existente, ahora se verán más a detalle.
Pág. 176
Los códigos de estados únicos más comunes son:
• 200 | OK
La petición se realizó correctamente.
• 201 | Created
• 202 | Accepted
La petición ha sido aceptada para procesamiento, pero este no fue completado.
• 204 | No content
La petición fue cumplida pero la respuesta no tiene contenido (Excepto en la
cabecera).
• 401 | Unauthorized
Similar a 403, ocurre cuando el usuario no puede acceder a la información
porque necesita una autorización.
Pág. 177
• 403 | Forbidden
No tiene los permisos suficientes para acceder a la información con sesión
iniciada.
Ocurre cuando un cliente quiere acceder a una página que no existe, pero talvez
si en el futuro. Es el más famoso que hay.
Pág. 178
4.1.4. Encabezados
• Cookies
➢ Almacena información en el navegador del usuario, puede ser
información que se guarde según navegue el usuario en la página
web, como por ejemplo si busca “computadoras” le saldrá en
recomendados “computadoras”, o que ítems agrego al carrito de
compras.
• Accept
Le hacemos una petición a un servidor y le debemos indicar como debe de ser.
Por ejemplo:
Pág. 179
Las Cabeceras pueden ser agrupadas de acuerdo a sus contextos:
• Cabecera general:
Cabeceras que se aplican tanto a las peticiones como a las respuestas, pero sin
relación con los datos que finalmente se transmiten en el cuerpo.
• Cabecera de consulta:
Cabeceras que contienen más información sobre el contenido que va a
obtenerse o sobre el cliente.
• Cabecera de respuesta:
Cabeceras que contienen más información sobre el contenido, como su origen
o el servidor (nombre, versión, etc.).
• Cabecera de entidad:
Cabeceras que contienen más información sobre el cuerpo de la entidad, como
el tamaño del contenido o su tipo MIME.
Pág. 180
4.2. AJAX
▪ Fue creado por Microsoft en 1999, AJAX son las siglas de “Asynchronous
JavaScript And XML”, en español seria “JavaScript y XML asincrónicos”.
▪ Las acciones que realiza AJAX son pueden ser asíncronas o no, aunque en la
gran mayoría de casos será asíncrona, más adelante se explicara que es.
Pág. 181
4.2.2. Mediante HTML
➢ action
➢ method
Los datos que enviamos son los campos completados del formulario,
respetando su sintaxis claro.
Ejemplo Práctico:
Pág. 182
4.2.3. XMLHttpRequest - XHR
[Link]. Definición
▪ A pesar que de XHR contenga el nombre del archivo XML, se puede transferir
muchos tipos de datos, siendo el más común e ideal hoy en día es JSON.
▪ Para hacer uso de este objeto, debemos tener un servidor y para simular uno
vamos a utilizar la extensión “Live Server” del editor de texto “Visual Studio
Code”.
Pág. 183
[Link]. Hacer Solicitud
Patrón básico:
• new XMLttpRequest( )
Creamos un nuevo objeto XHR
• [Link]( )
Lo utilizamos para configurar la solicitud, pero no hace ninguna conexión.
Recibe 5 parámetros:
1. Método
2. URL
3. Asíncrona o síncrono | Opcional
4. Usuario | Opcional
5. Contraseña | Opcional
Métodos:
El método es como ya vimos los de HTTP que son por ejemplo “GET” o “POST”.
URL:
• Relativa
Si vamos a hacer una petición en nuestro propio dominio, no es
necesario escribirlo y solo poner la ruta que comienza con “/”.
Ejemplo: /[Link]
• Absoluta
Es la URL completa incluyendo su protocolo. Ejemplo:
[Link]
Pág. 184
asíncrona o síncrono:
Siempre va a ser true. Porque según las palabras del profesor: No tiene sentido
una petición que no sea síncrona.
Usuario y contraseña:
• xhr evento
Antes de comenzar con la comunicación, debemos dar las instrucciones de que
deberá hacer con la información que recibimos, el más común es “load”.
• [Link]( )
Ahora sí, nos estamos comunicando con el servidor abriendo la conexión. Puede
recibir un parámetro opcional si tenemos que enviar información por el método
“POST” por ejemplo, como parámetro debemos colocar información.
Pág. 185
[Link].1. Eventos
• load
Se ejecuta cuando todo el archivo se descargó correctamente y podemos
imprimir los datos, es el más común de utilizar.
• error
Sera activado por si hubo un error en la petición, descarga, conexión, etc…
• abort
Sí la petición fue abortada porque lo pedimos será activado.
• loadend
Se dispara cuando termino la petición con o sin errores o si fue abortado.
• loadstart
Se ejecuta cuando apenas recibimos un dato.
• onreadystatechange
Se activa cuando cambia el valor del estado del XHR (Ahora lo veremos).
Pág. 186
[Link].2. Propiedades
• status
Nos devuelve el código de estado del protocolo.
• statusText
Devuelve el mensaje de estado del protocolo HTTP.
• responseText
Devuelve el cuerpo de la respuesta.
• responseType
Nos devuelve el formato de la respuesta, o lo podemos usar para indicar en que
formato no los debe devolver la respuesta.
• responseURL
URL absoluta a la que se le hizo la petición.
• readyState
Nos devuelve el estado del objeto XHR.
Pág. 187
[Link].3. Métodos
• [Link]( )
Ya lo vimos antes, pero vamos a dejar en claro que es un método
• [Link]( )
Al igual que el “open”, ya fue visto y explicado.
• [Link]( )
Cancela la solicitud por send.
• [Link]( )
Nos devuelve todos los encabezados de la respuesta.
• [Link]( )
Nos devuelve el valor de una cabecera según el parámetro que le demos
• [Link]( )
Añadimos cabeceras a la comunicación. Recibe 2 parameterros, primero el
nombre y después el valor.
Pág. 188
[Link].4. Ejemplo Practico
[Link]:
Pág. 189
[Link]:
[Link]:
Pág. 190
[Link]. Estado del XHR
• Estado 0 | No establecido
La conexión no se inició. Fue creado el objeto, pero no se llamó a “open”.
• Estado 1 | Abierto
Ya se configuro la solicitud y se llamó a “open” pero no a “send”.
• Estado 3 | Descargando
Es cuando se está descargando la respuesta.
• Estado 4 | Completado
La petición se completó.
Pág. 191
[Link]. Crear un “loader”
Ejemplo:
Pág. 192
[Link]. Procesando Respuestas con JSON
JavaScript puro ya tiene integrado JSON. Podemos pasar una cadena de texto
(responseText) a JSON para que pueda el lenguaje entenderlo y utilizarlo.
Tenemos que usar el método “.parse( )” del objeto “JSON” (Quedarían
“[Link]( )”), y le pasamos como parámetro JSON en forma de string.
Pág. 193
Ejemplo Práctico:
Tendremos estos 3 archivos:
JSON:
[Link]:
Pág. 194
[Link]:
Pág. 195
4.2.4. Promesas
[Link]. Definición
Sí quisiéramos evitar que ocurra esto y sea síncrono, se utilizan callbacks siendo
en este caso funciones que se ejecutan en otras, el problema es que hace un
código inelegible y además inestable, asiéndose llamar “callback hell” y daría un
resultado similar a este:
Así que para eso se inventaron las promesas. Podemos hacer instrucciones de
maneras síncrona, código más estable y mucho más limpio, y nos evitaremos
resultados inesperados a la hora de usar AJAX.
Pág. 196
▪ Las promesas llegaron en 2016 tras la actualización de JavaScript “ESMC6”
para solucionar el problema de callback hell.
Pág. 197
[Link]. Practica
• new Promise( )
Estamos creando la promesa, recibe un parámetro callback y este recibe 2
parámetros:
1. resolve | Resuelto
2. reject | Rechazado
Dentro del callback podemos hacer por ejemplo una condicional, si todo está
bien llamaremos a “resolve”, en caso contrario a “reject”. Ejemplo:
Pág. 198
• .then( )
Hacemos uso de la promesa y podemos poner cuantos “then” queramos, recibe
2 parámetros callbacks y el 2° opcional:
1. Exitoso
2. Fallado
• .catch( )
Se utiliza cuando la promesa es rechazada. Le pasamos un parámetro en forma
de callback. El “then” no podrá tener un segundo callback de error si queremos
que este funcione.
• .finally( )
Aunque la promesa sea rechazada o recibida, el callback que le pasemos como
parámetro sera ejecutado igualmente.
Ejemplo práctico:
Pág. 199
• [Link]( )
Lo usamos cuando queremos responder a las promesas cuando todas se hayan
cargado.
Pág. 200
[Link]. async y await
Apareció por primera vez en 2017. Nos permite trabajar con más facilidad las
promesas.
• async
Lo debemos poner detrás de una función y estamos transformando está en una
promesa, y podremos utilizar “then”. Ejemplo:
• await
Espera a que una promesa se establezca para poder continuar con su proceso.
“async” y “await” van tomados de la mano, esto quiere decir que para utilizar
await debe de estar si o si en una función con “async”.
Ejemplo Práctico:
Pág. 201
4.2.5. Crear Librería
Es más lógica de programador que utilizar nuevos ítems de JS, así que de paso
vamos a estar haciendo uso de todo lo que vimos.
[Link]
Es la forma más común de hacer una librería, utilizando todo lo que estuvimos
viendo.
HTML body:
Pág. 202
JavaScript:
Pág. 203
Este tema ya fue visto en “JavaScript en el navegador” pero igual seria explicado
para que este tema quede claro.
Pág. 204
4.2.6. Fetch
Recibe 2 parámetros:
1. URL
2. Respuesta a enviar | Opcional
• .text( )
Procesar la información como string.
• .json( )
Analiza la respuesta como JSON.
Ejemplo:
Pág. 205
La diferencia de código es gigante:
Pág. 206
[Link]. Enviar información
method:
body:
headers:
Pág. 207
Un ejemplo es enviándole a la página:
[Link]
[Link]
Pág. 208
4.3. WebSockets
4.3.1. Definición
Pero ¿qué significa?, con Ajax podemos por un solo y único canal
enviar información y recibirla, pero no podemos hacer ambas tareas
al mismo tiempo. Otro ejemplo serían los “walkie talkie”.
▪ Al igual que AJAX, podemos transferir datos como texto plano o JSON de
la misma manera.
Pág. 209
Durante la primera conexión, pregunta mediante encabezados (del protocolo
HTTP) al servidor si es compatible WebSockets, si response que sí la
comunicación continuare durante ese protocolo WS.
Como respuesta:
Pág. 210
4.3.2. Practica
• new WebSocket( )
Es un objeto al que le debemos pasar como único parámetro la URL con el
servidor que vamos a tener comunicación, y debe tener el protocolo “ws”.
Métodos:
• .close( )
Cierra la conexión con el servidor.
• .send( )
Le debemos pasar un parámetro la información que vamos a enviar.
Pág. 211
Puede recibir 3 parámetros opcionales:
• open
Indica cuando se estableció la conexión y nos permite mandar un mensaje de
alerta que se estableció la conexión.
• close
Ocurre cuando se cerró la conexión, y al igual que el evento “open” podemos
avisar cuando se desconectó.
• error
Podemos avisar se hubo un error que no nos permite continuar. Puede recibir
un parámetro opcional que nos devolverá la información del error.
• message
Este es el único fundamental porque si no, no tendría lógica tener una
comunicación.
Pág. 212
4.3.3. Estado del WS
Son como los códigos de conexión del objeto XHR aplicado a WS, el estado de
conexión que tenemos con un servidor mediante el protocolo WS.
• Estado 0 | No establecido
La conexión no está aún abierta.
• Estado 1 | Abierto
La conexión ya está abierta y nos estamos comunicando.
• Estado 2 | Cerrándose
Se está cerrando la comunicación.
• Estado 3 | Cerrado
Nos hemos desconectado.
Pág. 213
4.3.4. Ejemplo Practico
Vamos a tener una comunicación con este servidor que nos estará devolviendo
datos que les demos:
[Link]
HTML body:
JavaScript:
Pág. 214
5. Enlaces Externos
Cursos:
[Link]
[Link]
[Link]
[Link]
Documentación general:
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
AJAX y WS:
[Link]
6dfaf19608414a43af5fc6d0bb159546
[Link]
javascript
APIs de Prueba:
[Link]
[Link]
Pág. 215
De más:
[Link]
Pág. 216