commit
5dfcf69c32
@ -0,0 +1,481 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1> 30 Días de JavaScript: Bucles</h1>
|
||||||
|
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
|
||||||
|
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
|
||||||
|
</a>
|
||||||
|
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
|
||||||
|
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<sub>Autor:
|
||||||
|
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
|
||||||
|
<small> Enero, 2020</small>
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[<< Día 5](../dia_05_Arreglos/dia_05_arreglos.md) | [ Día 7 >>](../dia_07_Funciones/dia_07_funciones.md)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- [📔 Día 6](#📔-día-6)
|
||||||
|
- [Bucles](#bucles)
|
||||||
|
- [Bucle for](#bucle-for)
|
||||||
|
- [Bucle while](#bucle-while)
|
||||||
|
- [Bucle do while](#bucle-do-while)
|
||||||
|
- [Bucle for of](#bucle-for-of)
|
||||||
|
- [break](#break)
|
||||||
|
- [continue](#continue)
|
||||||
|
- [💻 Ejercicios: Día 6](#💻-ejerciciosdía-6)
|
||||||
|
- [Ejercicios: Nivel 1](#ejercicios-nivel-1)
|
||||||
|
- [Ejercicios: Nivel 2](#ejercicios-nivel-2)
|
||||||
|
- [Ejercicios: Nivel 3](#ejercicios-nivel-3)
|
||||||
|
|
||||||
|
# 📔 Día 6
|
||||||
|
|
||||||
|
## Bucles
|
||||||
|
|
||||||
|
La mayoría de las actividades que hacemos en la vida están llenas de repeticiones. Imagina que tienes que imprimir de 0 a 100 usando console.log(). Para implementar esta simple tarea, puede tomar de 2 a 5 minutos, este tipo de tarea tediosa y repetitiva se puede llevar a cabo usando un bucle. Si prefieres ver los videos, puedes revisar el [video tutorials](https://www.youtube.com/channel/UCM4xOopkYiPwJqyKsSqL9mw)
|
||||||
|
|
||||||
|
En los lenguajes de programación para realizar tareas repetitivas utilizamos diferentes tipos de bucles. Los siguientes ejemplos son los bucles de uso común en JavaScript y otros lenguajes de programación.
|
||||||
|
|
||||||
|
### Bucle for
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Estructura del bucle for
|
||||||
|
for(inicialización, condición, incremento/decremento){
|
||||||
|
// el código va aquí
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (let i = 0; i <= 5; i++) {
|
||||||
|
console.log(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 1 2 3 4 5
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (let i = 5; i >= 0; i--) {
|
||||||
|
console.log(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5 4 3 2 1 0
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (let i = 0; i <= 5; i++) {
|
||||||
|
console.log(`${i} * ${i} = ${i * i}`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
0 * 0 = 0
|
||||||
|
1 * 1 = 1
|
||||||
|
2 * 2 = 4
|
||||||
|
3 * 3 = 9
|
||||||
|
4 * 4 = 16
|
||||||
|
5 * 5 = 25
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const countries = ["Finland", "Sweden", "Denmark", "Norway", "Iceland"];
|
||||||
|
const newArr = [];
|
||||||
|
for (let i = 0; i < countries.length; i++) {
|
||||||
|
newArr.push(countries[i].toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
// ["FINLAND", "SWEDEN", "DENMARK", "NORWAY", "ICELAND"]
|
||||||
|
```
|
||||||
|
|
||||||
|
Agregar todos los elementos en un array
|
||||||
|
|
||||||
|
```js
|
||||||
|
const numbers = [1, 2, 3, 4, 5];
|
||||||
|
let sum = 0;
|
||||||
|
for (let i = 0; i < numbers.length; i++) {
|
||||||
|
sum = sum + numbers[i]; // can be shorten, sum += numbers[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(sum); // 15
|
||||||
|
```
|
||||||
|
|
||||||
|
Crea un nuevo array basado en el array existente
|
||||||
|
|
||||||
|
```js
|
||||||
|
const numbers = [1, 2, 3, 4, 5];
|
||||||
|
const newArr = [];
|
||||||
|
let sum = 0;
|
||||||
|
for (let i = 0; i < numbers.length; i++) {
|
||||||
|
newArr.push(numbers[i] ** 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(newArr); // [1, 4, 9, 16, 25]
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const countries = ["Finland", "Sweden", "Norway", "Denmark", "Iceland"];
|
||||||
|
const newArr = [];
|
||||||
|
for (let i = 0; i < countries.length; i++) {
|
||||||
|
newArr.push(countries[i].toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(newArr); // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bucle while
|
||||||
|
|
||||||
|
```js
|
||||||
|
let i = 0;
|
||||||
|
while (i <= 5) {
|
||||||
|
console.log(i);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 1 2 3 4 5
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bucle do while
|
||||||
|
|
||||||
|
```js
|
||||||
|
let i = 0;
|
||||||
|
do {
|
||||||
|
console.log(i);
|
||||||
|
i++;
|
||||||
|
} while (i <= 5);
|
||||||
|
|
||||||
|
// 0 1 2 3 4 5
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bucle for of
|
||||||
|
|
||||||
|
Usamos el bucle for of para arrays. Es una forma muy práctica de iterar a través de un array, si no estamos interesados en el index de cada elemento del array.
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (const element of arr) {
|
||||||
|
// el código va aquí
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const numbers = [1, 2, 3, 4, 5];
|
||||||
|
|
||||||
|
for (const num of numbers) {
|
||||||
|
console.log(num);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1 2 3 4 5
|
||||||
|
|
||||||
|
for (const num of numbers) {
|
||||||
|
console.log(num * num);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1 4 9 16 25
|
||||||
|
|
||||||
|
// sumando todos los números del array
|
||||||
|
let sum = 0;
|
||||||
|
for (const num of numbers) {
|
||||||
|
sum = sum + num;
|
||||||
|
// también se puede acortar así, sum += num
|
||||||
|
// después de esto usaremos la sintaxis más corta (+=, -=, *=, /= etc)
|
||||||
|
}
|
||||||
|
console.log(sum); // 15
|
||||||
|
|
||||||
|
const webTechs = [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Redux",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const tech of webTechs) {
|
||||||
|
console.log(tech.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTML CSS JAVASCRIPT REACT NODE MONGODB
|
||||||
|
|
||||||
|
for (const tech of webTechs) {
|
||||||
|
console.log(tech[0]); // obtiene solo la primera letra de cada elemento, H C J R N M
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const countries = ["Finland", "Sweden", "Norway", "Denmark", "Iceland"];
|
||||||
|
const newArr = [];
|
||||||
|
for (const country of countries) {
|
||||||
|
newArr.push(country.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(newArr); // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### break
|
||||||
|
|
||||||
|
Break se utiliza para interrumpir un bucle.
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (let i = 0; i <= 5; i++) {
|
||||||
|
if (i == 3) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
console.log(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 1 2
|
||||||
|
```
|
||||||
|
|
||||||
|
El código anterior se detiene si se encuentran 3 en el proceso de iteración.
|
||||||
|
|
||||||
|
### continue
|
||||||
|
|
||||||
|
Usamos la palabra clave _continue_ para omitir ciertas iteraciones.
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (let i = 0; i <= 5; i++) {
|
||||||
|
if (i == 3) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
console.log(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 1 2 4 5
|
||||||
|
```
|
||||||
|
|
||||||
|
🌕 Tienes una energía ilimitada. Acabas de completar los desafíos del día 6 y llevas seis pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
|
||||||
|
|
||||||
|
## 💻 Ejercicios:Día 6
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 1
|
||||||
|
|
||||||
|
```js
|
||||||
|
const countries = [
|
||||||
|
"Albania",
|
||||||
|
"Bolivia",
|
||||||
|
"Canada",
|
||||||
|
"Denmark",
|
||||||
|
"Ethiopia",
|
||||||
|
"Finland",
|
||||||
|
"Germany",
|
||||||
|
"Hungary",
|
||||||
|
"Ireland",
|
||||||
|
"Japan",
|
||||||
|
"Kenya",
|
||||||
|
];
|
||||||
|
|
||||||
|
const webTechs = [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Redux",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
];
|
||||||
|
|
||||||
|
const mernStack = ["MongoDB", "Express", "React", "Node"];
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Itera de 0 a 10 usando el bucle for, haga lo mismo usando los bucles while y do while
|
||||||
|
2. Itera 10 to 0 usando el bucle for, haga lo mismo usando los bucles while y do while
|
||||||
|
3. Itera de 0 a n usando el bucle for
|
||||||
|
4. Escribe un bucle que haga el siguiente patrón usando console.log():
|
||||||
|
|
||||||
|
```js
|
||||||
|
#
|
||||||
|
##
|
||||||
|
###
|
||||||
|
####
|
||||||
|
#####
|
||||||
|
######
|
||||||
|
#######
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Usa un bucle para imprimir el siguiente patrón:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
0 x 0 = 0
|
||||||
|
1 x 1 = 1
|
||||||
|
2 x 2 = 4
|
||||||
|
3 x 3 = 9
|
||||||
|
4 x 4 = 16
|
||||||
|
5 x 5 = 25
|
||||||
|
6 x 6 = 36
|
||||||
|
7 x 7 = 49
|
||||||
|
8 x 8 = 64
|
||||||
|
9 x 9 = 81
|
||||||
|
10 x 10 = 100
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Usando un bucle imprime el siguiente patrón:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
i i^2 i^3
|
||||||
|
0 0 0
|
||||||
|
1 1 1
|
||||||
|
2 4 8
|
||||||
|
3 9 27
|
||||||
|
4 16 64
|
||||||
|
5 25 125
|
||||||
|
6 36 216
|
||||||
|
7 49 343
|
||||||
|
8 64 512
|
||||||
|
9 81 729
|
||||||
|
10 100 1000
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Usa el bucle for para iterar de 0 a 100 e imprima solo números pares
|
||||||
|
8. Usa el bucle for para iterar de 0 a 100 e imprima solo números impares
|
||||||
|
9. Usa el bucle for para iterar de 0 a 100 e imprima los solo números primos
|
||||||
|
10. Usa el bucle for para iterar de 0 a 100 e imprima la suma de todos los números.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
La suma de todos los números de 0 a 100 es 5050.
|
||||||
|
```
|
||||||
|
|
||||||
|
11. Usa el bucle para iterar de 0 a 100 e imprimir la suma de todos los pares y la suma de todos los impares.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
La suma de todos los pares de 0 a 100 es 2550. Y la suma de todos los impares de 0 a 100 es 2500.
|
||||||
|
```
|
||||||
|
|
||||||
|
12. Usa el bucle para iterar de 0 a 100 e imprimir la suma de todos los pares y la suma de todos los impares. Imprimir suma de pares y suma de impares como un array
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[2550, 2500]
|
||||||
|
```
|
||||||
|
|
||||||
|
13. Desarrolla un pequeño script que genera una matriz de 5 números aleatorios
|
||||||
|
14. Desarrolla un pequeño script que genera una matriz de 5 números aleatorios. Los números debe ser únicos
|
||||||
|
15. Desarrolla un pequeño script que genera un id aleatorio de seis caracteres:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
5j2khz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 2
|
||||||
|
|
||||||
|
1. Desarrolla un pequeño script que genera un id con cualquier número de caracteres aleatorios:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
fe3jo1gl124g
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
xkqci4utda1lmbelpkm03rba
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Escribe un script que genere un número hexadecimal aleatorio.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
'#ee33df'
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Escribe un script que genere un número de color rgb aleatorio.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rgb(240,180,80)
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Usando el array countries anterior, crea un array como el siguiente.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
["ALBANIA", "BOLIVIA", "CANADA", "DENMARK", "ETHIOPIA", "FINLAND", "GERMANY", "HUNGARY", "IRELAND", "JAPAN", "KENYA"]
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Usando el array countries anterior, crea un array para saber la longitud de cada país.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[7, 7, 6, 7, 8, 7, 7, 7, 7, 5, 5]
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Utiliza el array countries para crear la siguiente array de arrays
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[
|
||||||
|
['Albania', 'ALB', 7],
|
||||||
|
['Bolivia', 'BOL', 7],
|
||||||
|
['Canada', 'CAN', 6],
|
||||||
|
['Denmark', 'DEN', 7],
|
||||||
|
['Ethiopia', 'ETH', 8],
|
||||||
|
['Finland', 'FIN', 7],
|
||||||
|
['Germany', 'GER', 7],
|
||||||
|
['Hungary', 'HUN', 7],
|
||||||
|
['Ireland', 'IRE', 7],
|
||||||
|
['Iceland', 'ICE', 7],
|
||||||
|
['Japan', 'JAP', 5],
|
||||||
|
['Kenya', 'KEN', 5]
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
1. En el array countries anterior, verifica si hay un país que contenga la palabra 'land'. Si hay países que contienen 'land', imprimelo cono array. Si no hay ningún país que contenga la palabra'land', imprima 'Todos estos países no tienen la palabra land'.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
['Finland','Ireland', 'Iceland']
|
||||||
|
```
|
||||||
|
|
||||||
|
1. En el array countries anterior, verifica si hay un país que termina con una subcadena (substring) 'ia'. Si hay países que terminan con 'ia', imprimelo como un array. Si no hay ningún país que contenga la palabra 'ia', imprime 'Estos países no terminan con ia'.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
['Albania', 'Bolivia','Ethiopia']
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Usando el array countries anterior, encuentre el país que contiene la mayor cantidad de caracteres.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Ethiopia
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Usando el array countries anterior, encuentre el país que contiene sólo 5 caracteres.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
['Japan', 'Kenya']
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Encuentra la palabra más larga en el array webTechs
|
||||||
|
1. Utiliza el array de webTechs para crear la el siguiente array de arrays:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[["HTML", 4], ["CSS", 3],["JavaScript", 10],["React", 5],["Redux", 5],["Node", 4],["MongoDB", 7]]
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Una aplicación creada con MongoDB, Express, React y Node se denomina MERN stack app. Crea el acrónimo MERN usando el array mernStack
|
||||||
|
1. Iterar a través del array, ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"] usando el bucle for o el bucle for of e imprime los elementos.
|
||||||
|
1. Este es un array de frutas, ['banana', 'orange', 'mango', 'lemon'] invierte el orden usando un bucle sin usar el método reverse().
|
||||||
|
1. Imprime todos los elementos del array como se muestra a continuación:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const fullStack = [
|
||||||
|
["HTML", "CSS", "JS", "React"],
|
||||||
|
["Node", "Express", "MongoDB"],
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
HTML
|
||||||
|
CSS
|
||||||
|
JS
|
||||||
|
REACT
|
||||||
|
NODE
|
||||||
|
EXPRESS
|
||||||
|
MONGODB
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 3
|
||||||
|
|
||||||
|
1. Copia el array countries (Evita mutaciones)
|
||||||
|
1. Los arrays son mutables. Crea una copia del array que no modifique el original. Ordena la copia del array y guárdala en una variable sortedCountries
|
||||||
|
1. Ordena el array webTechs y el array mernStack
|
||||||
|
1. Extrae todos los países que contengan la palabra 'land' del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e imprimela como un array
|
||||||
|
1. Encuentra el país que contiene la mayor cantidad de caracteres en el [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
|
||||||
|
1. Extrae todos los países que contienen la palabra 'land' del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e imprimela como un array
|
||||||
|
1. Extrae todos los países que contengan solo cuatro caracters del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e impremela como un array
|
||||||
|
1. Extrae todos los paíse que contengan dos o más palabras del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e imprimela como un array
|
||||||
|
1. Invertir el [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) y poner en mayúscula cada país y almacenalo en un array
|
||||||
|
|
||||||
|
🎉 ¡FELICITACIONES! 🎉
|
||||||
|
|
||||||
|
[<< Día 5](../dia_05_Arreglos/dia_05_arreglos.md) | [Día 7 >>](../dia_07_Funciones/dia_07_funciones.md)
|
@ -0,0 +1,592 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1> 30 Días de JavaScript: Objetos</h1>
|
||||||
|
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
|
||||||
|
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
|
||||||
|
</a>
|
||||||
|
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
|
||||||
|
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<sub>Autor:
|
||||||
|
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
|
||||||
|
<small> Enero, 2020</small>
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[<< Día 7](../dia_07_Funciones/dia_07_funciones.md) | [Día 9 >>](../dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- [📔 Día 8](#📔-día-8)
|
||||||
|
- [Scope](#scope-alcance)
|
||||||
|
- [Objeto Global Window](#objeto-global-window)
|
||||||
|
- [Global scope](#global-scope)
|
||||||
|
- [Local scope](#local-scope)
|
||||||
|
- [📔 Objeto](#📔-objeto)
|
||||||
|
- [Crear un objeto vacío](#crear-un-objeto-vacío)
|
||||||
|
- [Crear un objeto con valores](#crear-un-objeto-con-valores)
|
||||||
|
- [Obtener valores de un objeto](#obtener-valores-de-un-objeto)
|
||||||
|
- [Crear métodos de objetos](#crear-métodos-de-objetos)
|
||||||
|
- [Establecer una nueva clave para un objeto](#establecer-una-nueva-clave-para-un-objeto)
|
||||||
|
- [Métodos de los objetos](#métodos-de-los-objetos)
|
||||||
|
- [Obtención de claves de objetos mediante Object.keys()](#obtención-de-claves-de-objetos-mediante-objectkeys)
|
||||||
|
- [Obtención de valores de objetos mediante Object.values()](#obtención-de-valores-de-objetos-mediante-objectvalues)
|
||||||
|
- [Obtención de claves y valores de objetos mediante Object.entries()](#obtención-de-claves-y-valores-de-objetos-mediante-objectentries)
|
||||||
|
- [Comprobación de propiedades mediante hasOwnProperty()](#comprobación-de-propiedades-mediante-hasownproperty)
|
||||||
|
- [💻 Ejercicios](#💻-ejercicios)
|
||||||
|
- [Ejercicios: Nivel 1](#ejercicios-nivel-1)
|
||||||
|
- [Ejercicios: Nivel 2](#ejercicios-nivel-2)
|
||||||
|
- [Ejercicios: Nivel 3](#ejercicios-nivel-3)
|
||||||
|
|
||||||
|
# 📔 Día 8
|
||||||
|
|
||||||
|
## Scope (alcance)
|
||||||
|
|
||||||
|
La variable es la parte fundamental en la programación. Declaramos variables para almacenar diferentes tipos de datos. Para declarar una variable usamos la palabra clave _var_, _let_, y _const_. Una variable puede declararse en diferentes scope. En esta sección, veremos el alcance de las variables, el alcance de las variables cuando usamos var o let.
|
||||||
|
El scope de las variables pueden ser:
|
||||||
|
|
||||||
|
- Global
|
||||||
|
- Local
|
||||||
|
|
||||||
|
Las variables pueden ser declaradas con un scope global o local. Veremos tanto el scope global como el local. Cualquier cosa declarada sin let, var o const tiene un alcance global.
|
||||||
|
|
||||||
|
Imaginemos que tenemos un fichero scope.js.
|
||||||
|
|
||||||
|
### Objeto Global Window
|
||||||
|
|
||||||
|
Sin usar console.log() abre tu navegador y comprueba, verás el valor de a y b si escribes a o b en el navegador. Eso significa que a y b ya están disponibles en window
|
||||||
|
|
||||||
|
```js
|
||||||
|
//scope.js
|
||||||
|
a = "JavaScript"; // declarar una variable sin let o const la hace disponible en el objeto window y esta se encuentra en cualquier lugar
|
||||||
|
b = 10; // es una variable de scope global y se encuentra en el objeto ventana
|
||||||
|
function letsLearnScope() {
|
||||||
|
console.log(a, b);
|
||||||
|
if (true) {
|
||||||
|
console.log(a, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(a, b); // accesibles
|
||||||
|
```
|
||||||
|
|
||||||
|
### Global scope
|
||||||
|
|
||||||
|
Una variable declarada globalmente puede ser accedida en cualquier lugar del mismo archivo. Pero el término global es relativo. Puede ser global al archivo o puede ser global relativo a algún bloque de códigos.
|
||||||
|
|
||||||
|
```js
|
||||||
|
//scope.js
|
||||||
|
let a = "JavaScript"; // es un scope global que se encontrará en cualquier parte de este archivo
|
||||||
|
let b = 10; // es un scope global que se encontrará en cualquier parte de este archivo
|
||||||
|
function letsLearnScope() {
|
||||||
|
console.log(a, b); // JavaScript 10, accesible
|
||||||
|
if (true) {
|
||||||
|
let a = "Python";
|
||||||
|
let b = 100;
|
||||||
|
console.log(a, b); // Python 100
|
||||||
|
}
|
||||||
|
console.log(a, b);
|
||||||
|
}
|
||||||
|
letsLearnScope();
|
||||||
|
console.log(a, b); // JavaScript 10, accesible
|
||||||
|
```
|
||||||
|
|
||||||
|
### Local scope
|
||||||
|
|
||||||
|
Una variable declarada como local sólo puede ser accedida en determinados bloques de código.
|
||||||
|
|
||||||
|
- Scope del bloque
|
||||||
|
- Scope de la función
|
||||||
|
|
||||||
|
```js
|
||||||
|
//scope.js
|
||||||
|
let a = "JavaScript"; // es un scope global que se encontrará en cualquier parte de este archivo
|
||||||
|
let b = 10; // es un scope global que se encontrará en cualquier parte de este archivo
|
||||||
|
// Scope de la función
|
||||||
|
function letsLearnScope() {
|
||||||
|
console.log(a, b); // JavaScript 10, accesible
|
||||||
|
let value = false;
|
||||||
|
// Scope del bloque
|
||||||
|
if (true) {
|
||||||
|
// podemos acceder desde la función y fuera de la función pero
|
||||||
|
// las variables declaradas dentro del if no serán accesibles fuera del bloque if
|
||||||
|
let a = "Python";
|
||||||
|
let b = 20;
|
||||||
|
let c = 30;
|
||||||
|
let d = 40;
|
||||||
|
value = !value;
|
||||||
|
console.log(a, b, c, value); // Python 20 30 true
|
||||||
|
}
|
||||||
|
// no podemos acceder a c porque el scope de c es sólo el bloque if
|
||||||
|
console.log(a, b, value); // JavaScript 10 true
|
||||||
|
}
|
||||||
|
letsLearnScope();
|
||||||
|
console.log(a, b); // JavaScript 10, accesible
|
||||||
|
```
|
||||||
|
|
||||||
|
Ahora, usted tiene una comprensión del scope. Una variable declarada con _var_ sólo tiene ámbito de función, pero una variable declarada con _let_ o _const_ tiene scope de bloque (bloque de función, bloque if, bloque de bucle, etc). El bloque en JavaScript es un código entre dos llaves({}).
|
||||||
|
|
||||||
|
```js
|
||||||
|
//scope.js
|
||||||
|
function letsLearnScope() {
|
||||||
|
var gravity = 9.81;
|
||||||
|
console.log(gravity);
|
||||||
|
}
|
||||||
|
// console.log(gravity), Uncaught ReferenceError: la gravedad no está definida
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
var gravity = 9.81;
|
||||||
|
console.log(gravity); // 9.81
|
||||||
|
}
|
||||||
|
console.log(gravity); // 9.81
|
||||||
|
|
||||||
|
for (var i = 0; i < 3; i++) {
|
||||||
|
console.log(i); // 0, 1, 2
|
||||||
|
}
|
||||||
|
console.log(i); // 3
|
||||||
|
```
|
||||||
|
|
||||||
|
En ES6 y superiores existe _let_ y _const_, por lo que no sufrirás la insidia de _var_. Cuando usamos _let_ nuestra variable tiene alcance de bloque y no infectara otras partes de nuestro código.
|
||||||
|
|
||||||
|
```js
|
||||||
|
//scope.js
|
||||||
|
function letsLearnScope() {
|
||||||
|
// puedes usar let o const, pero la gravedad es constante prefiero usar const
|
||||||
|
const gravity = 9.81;
|
||||||
|
console.log(gravity);
|
||||||
|
}
|
||||||
|
// console.log(gravity), Uncaught ReferenceError: la gravedad no está definida
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
const gravity = 9.81;
|
||||||
|
console.log(gravity); // 9.81
|
||||||
|
}
|
||||||
|
// console.log(gravity), Uncaught ReferenceError: la gravedad no está definida
|
||||||
|
|
||||||
|
for (let i = 0; i < 3; i++) {
|
||||||
|
console.log(i); // 0, 1, 2
|
||||||
|
}
|
||||||
|
// console.log(i), Uncaught ReferenceError: i no está definida
|
||||||
|
```
|
||||||
|
|
||||||
|
El ámbito _let_ y _const_ es el mismo. La diferencia es sólo la reasignación. No podemos cambiar o reasignar el valor de la variable `const`. Te sugiero encarecidamente que utilices _let_ y _const_, utilizando _let_ y _const_ escribirás un código limpio y evitarás errores difíciles de depurar. Como regla general, puedes usar _let_ para cualquier valor que cambie, _const_ para cualquier valor constante, y para un array, objeto, función de flecha y expresión de función.
|
||||||
|
|
||||||
|
## 📔 Objeto
|
||||||
|
|
||||||
|
Todo puede ser un objeto y los objetos tienen propiedades y las propiedades tienen valores, por lo que un objeto es un par clave-valor. El orden de la clave no está reservado, o no hay orden. Para crear un objeto literal, utilizamos dos llaves.
|
||||||
|
|
||||||
|
### Crear un objeto vacío
|
||||||
|
|
||||||
|
Un objeto vacío
|
||||||
|
|
||||||
|
```js
|
||||||
|
const person = {};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Crear un objeto con valores
|
||||||
|
|
||||||
|
Ahora, el objeto persona tiene las propiedades firstName, lastName, age, location, skills y isMarried. El valor de las propiedades o claves puede ser una cadena, un número, un booleano, un objeto, null, undefined o una función.
|
||||||
|
|
||||||
|
Veamos algunos ejemplos de objetos. Cada clave tiene un valor en el objeto.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const rectangle = {
|
||||||
|
length: 20,
|
||||||
|
width: 20,
|
||||||
|
};
|
||||||
|
console.log(rectangle); // {length: 20, width: 20}
|
||||||
|
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
lastName: "Yetayeh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
"Python",
|
||||||
|
"D3.js",
|
||||||
|
],
|
||||||
|
isMarried: true,
|
||||||
|
};
|
||||||
|
console.log(person);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Obtener valores de un objeto
|
||||||
|
|
||||||
|
Podemos acceder a los valores del objeto utilizando dos métodos:
|
||||||
|
|
||||||
|
- usando . seguido del nombre de la clave si el nombre de la clave es de una sola palabra
|
||||||
|
- utilizando corchetes y comillas
|
||||||
|
|
||||||
|
```js
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
lastName: "Yetayeh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
"Python",
|
||||||
|
"D3.js",
|
||||||
|
],
|
||||||
|
getFullName: function () {
|
||||||
|
return `${this.firstName}${this.lastName}`;
|
||||||
|
},
|
||||||
|
"phone number": "+3584545454545",
|
||||||
|
};
|
||||||
|
|
||||||
|
// acceder a los valores mediante .
|
||||||
|
console.log(person.firstName);
|
||||||
|
console.log(person.lastName);
|
||||||
|
console.log(person.age);
|
||||||
|
console.log(person.location); // undefined
|
||||||
|
|
||||||
|
// se puede acceder al valor utilizando corchetes y el nombre de la clave
|
||||||
|
console.log(person["firstName"]);
|
||||||
|
console.log(person["lastName"]);
|
||||||
|
console.log(person["age"]);
|
||||||
|
console.log(person["age"]);
|
||||||
|
console.log(person["location"]); // undefined
|
||||||
|
|
||||||
|
// por ejemplo, para acceder al número de teléfono sólo utilizamos el método del corchete
|
||||||
|
console.log(person["phone number"]);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Crear métodos de objetos
|
||||||
|
|
||||||
|
Ahora, el objeto persona tiene las propiedades getFullName. El getFullName es una función dentro del objeto persona y lo llamamos un método del objeto. La palabra clave _this_ se refiere al objeto mismo. Podemos utilizar la palabra _this_ para acceder a los valores de diferentes propiedades del objeto. No podemos usar una función de flecha como método de objeto porque la palabra this se refiere a window dentro de una función de flecha en lugar del objeto mismo. Ejemplo de objeto:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
lastName: "Yetayeh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
"Python",
|
||||||
|
"D3.js",
|
||||||
|
],
|
||||||
|
getFullName: function () {
|
||||||
|
return `${this.firstName} ${this.lastName}`;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(person.getFullName());
|
||||||
|
// Asabeneh Yetayeh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Establecer una nueva clave para un objeto
|
||||||
|
|
||||||
|
Un objeto es una estructura de datos mutable y podemos modificar el contenido de un objeto después de su creación.
|
||||||
|
|
||||||
|
Establecer una nueva clave en un objeto
|
||||||
|
|
||||||
|
```js
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
lastName: "Yetayeh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: [
|
||||||
|
"HTML",
|
||||||
|
"CSS",
|
||||||
|
"JavaScript",
|
||||||
|
"React",
|
||||||
|
"Node",
|
||||||
|
"MongoDB",
|
||||||
|
"Python",
|
||||||
|
"D3.js",
|
||||||
|
],
|
||||||
|
getFullName: function () {
|
||||||
|
return `${this.firstName} ${this.lastName}`;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
person.nationality = "Ethiopian";
|
||||||
|
person.country = "Finland";
|
||||||
|
person.title = "teacher";
|
||||||
|
person.skills.push("Meteor");
|
||||||
|
person.skills.push("SasS");
|
||||||
|
person.isMarried = true;
|
||||||
|
|
||||||
|
person.getPersonInfo = function () {
|
||||||
|
let skillsWithoutLastSkill = this.skills
|
||||||
|
.splice(0, this.skills.length - 1)
|
||||||
|
.join(", ");
|
||||||
|
let lastSkill = this.skills.splice(this.skills.length - 1)[0];
|
||||||
|
|
||||||
|
let skills = `${skillsWithoutLastSkill}, and ${lastSkill}`;
|
||||||
|
let fullName = this.getFullName();
|
||||||
|
let statement = `${fullName} is a ${this.title}.\nHe lives in ${this.country}.\nHe teaches ${skills}.`;
|
||||||
|
return statement;
|
||||||
|
};
|
||||||
|
console.log(person);
|
||||||
|
console.log(person.getPersonInfo());
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Asabeneh Yetayeh is a teacher.
|
||||||
|
He lives in Finland.
|
||||||
|
He teaches HTML, CSS, JavaScript, React, Node, MongoDB, Python, D3.js, Meteor, and SasS.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Métodos de los objetos
|
||||||
|
|
||||||
|
Existen diferentes métodos para manipular un objeto. Veamos algunos de los métodos disponibles.
|
||||||
|
|
||||||
|
_Object.assign_: Para copiar un objeto sin modificar el objeto original
|
||||||
|
|
||||||
|
```js
|
||||||
|
const person = {
|
||||||
|
firstName: "Asabeneh",
|
||||||
|
age: 250,
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
skills: ["HTML", "CSS", "JS"],
|
||||||
|
title: "teacher",
|
||||||
|
address: {
|
||||||
|
street: "Heitamienkatu 16",
|
||||||
|
pobox: 2002,
|
||||||
|
city: "Helsinki",
|
||||||
|
},
|
||||||
|
getPersonInfo: function () {
|
||||||
|
return `I am ${this.firstName} and I live in ${this.city}, ${this.country}. I am ${this.age}.`;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
//Métodos de objetos: Object.assign, Object.keys, Object.values, Object.entries
|
||||||
|
//hasOwnProperty
|
||||||
|
|
||||||
|
const copyPerson = Object.assign({}, person);
|
||||||
|
console.log(copyPerson);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Obtención de claves de objetos mediante Object.keys()
|
||||||
|
|
||||||
|
_Object.keys_: Para obtener las claves o propiedades de un objeto como un array
|
||||||
|
|
||||||
|
```js
|
||||||
|
const keys = Object.keys(copyPerson);
|
||||||
|
console.log(keys); //['firstName', 'age', 'country','city', 'skills','title', 'address', 'getPersonInfo']
|
||||||
|
const address = Object.keys(copyPerson.address);
|
||||||
|
console.log(address); //['street', 'pobox', 'city']
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Obtención de valores de objetos mediante Object.values()
|
||||||
|
|
||||||
|
_Object.values_:Para obtener los valores de un objeto como un array
|
||||||
|
|
||||||
|
```js
|
||||||
|
const values = Object.values(copyPerson);
|
||||||
|
console.log(values);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Obtención de claves y valores de objetos mediante Object.entries()
|
||||||
|
|
||||||
|
_Object.entries_:Para obtener las claves y valores de un array
|
||||||
|
|
||||||
|
```js
|
||||||
|
const entries = Object.entries(copyPerson);
|
||||||
|
console.log(entries);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Comprobación de propiedades mediante hasOwnProperty()
|
||||||
|
|
||||||
|
_hasOwnProperty_: Para comprobar si una clave o propiedad específica existe en un objeto
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log(copyPerson.hasOwnProperty("name"));
|
||||||
|
console.log(copyPerson.hasOwnProperty("score"));
|
||||||
|
```
|
||||||
|
|
||||||
|
🌕 Eres asombroso. Ahora, estás súper cargado con el poder de los objetos. Acabas de completar los desafíos del día 8 y llevas 8 pasos de tu camino a la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
|
||||||
|
|
||||||
|
## 💻 Ejercicios
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 1
|
||||||
|
|
||||||
|
1. Crear un objeto vacío llamado dog
|
||||||
|
1. Imprime el objeto dog en la consola
|
||||||
|
1. Añade las propiedades name, legs, color, age y bark para el objeto dog. La propiedad bark es un método que devuelve _woof woof_
|
||||||
|
1. Obtener name, legs, color, age y el valor de bark del objeto dog
|
||||||
|
1. Establecer nuevas propiedades al objeto dog: breed, getDogInfo
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 2
|
||||||
|
|
||||||
|
1. Encuentra a la persona que tiene muchas habilidades en el objeto de los usuarios.
|
||||||
|
1. Contar los usuarios conectados, contar los usuarios que tienen más de 50 puntos del siguiente objeto.
|
||||||
|
|
||||||
|
````js
|
||||||
|
const users = {
|
||||||
|
Alex: {
|
||||||
|
email: 'alex@alex.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript'],
|
||||||
|
age: 20,
|
||||||
|
isLoggedIn: false,
|
||||||
|
points: 30
|
||||||
|
},
|
||||||
|
Asab: {
|
||||||
|
email: 'asab@asab.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
|
||||||
|
age: 25,
|
||||||
|
isLoggedIn: false,
|
||||||
|
points: 50
|
||||||
|
},
|
||||||
|
Brook: {
|
||||||
|
email: 'daniel@daniel.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
|
||||||
|
age: 30,
|
||||||
|
isLoggedIn: true,
|
||||||
|
points: 50
|
||||||
|
},
|
||||||
|
Daniel: {
|
||||||
|
email: 'daniel@alex.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
|
||||||
|
age: 20,
|
||||||
|
isLoggedIn: false,
|
||||||
|
points: 40
|
||||||
|
},
|
||||||
|
John: {
|
||||||
|
email: 'john@john.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],
|
||||||
|
age: 20,
|
||||||
|
isLoggedIn: true,
|
||||||
|
points: 50
|
||||||
|
},
|
||||||
|
Thomas: {
|
||||||
|
email: 'thomas@thomas.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript', 'React'],
|
||||||
|
age: 20,
|
||||||
|
isLoggedIn: false,
|
||||||
|
points: 40
|
||||||
|
},
|
||||||
|
Paul: {
|
||||||
|
email: 'paul@paul.com',
|
||||||
|
skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'],
|
||||||
|
age: 20,
|
||||||
|
isLoggedIn: false,
|
||||||
|
points: 40
|
||||||
|
}
|
||||||
|
}```
|
||||||
|
|
||||||
|
````
|
||||||
|
|
||||||
|
1. Encontrar personas que sean desarrolladores MERN stack del objeto de los usuarios
|
||||||
|
1. Establezca su nombre en el objeto usuarios sin modificar el objeto usuarios original
|
||||||
|
1. Obtener todas las claves o propiedades del objeto usuarios
|
||||||
|
1. Obtener todos los valores del objeto usuarios
|
||||||
|
1. Utilice el objeto países para imprimir el nombre del país, la capital, la población y los idiomas.
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 3
|
||||||
|
|
||||||
|
1. Crea un objeto literal llamado _personAccount_. Tiene las propiedades _firstName, lastName, incomes, expenses_ y tiene los metodos _totalIncome, totalExpense, accountInfo,addIncome, addExpense_ y _accountBalance_. Incomes es un conjunto de ingresos y su descripción y expenses es un conjunto de ingresos y su descripción.
|
||||||
|
|
||||||
|
2. \*\*\*\* Preguntas:2, 3 y 4 se basan en los siguientes dos arrays: users y products ()
|
||||||
|
|
||||||
|
```js
|
||||||
|
const users = [
|
||||||
|
{
|
||||||
|
_id: "ab12ex",
|
||||||
|
username: "Alex",
|
||||||
|
email: "alex@alex.com",
|
||||||
|
password: "123123",
|
||||||
|
createdAt: "08/01/2020 9:00 AM",
|
||||||
|
isLoggedIn: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_id: "fg12cy",
|
||||||
|
username: "Asab",
|
||||||
|
email: "asab@asab.com",
|
||||||
|
password: "123456",
|
||||||
|
createdAt: "08/01/2020 9:30 AM",
|
||||||
|
isLoggedIn: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_id: "zwf8md",
|
||||||
|
username: "Brook",
|
||||||
|
email: "brook@brook.com",
|
||||||
|
password: "123111",
|
||||||
|
createdAt: "08/01/2020 9:45 AM",
|
||||||
|
isLoggedIn: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_id: "eefamr",
|
||||||
|
username: "Martha",
|
||||||
|
email: "martha@martha.com",
|
||||||
|
password: "123222",
|
||||||
|
createdAt: "08/01/2020 9:50 AM",
|
||||||
|
isLoggedIn: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_id: "ghderc",
|
||||||
|
username: "Thomas",
|
||||||
|
email: "thomas@thomas.com",
|
||||||
|
password: "123333",
|
||||||
|
createdAt: "08/01/2020 10:00 AM",
|
||||||
|
isLoggedIn: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const products = [
|
||||||
|
{
|
||||||
|
_id: "eedfcf",
|
||||||
|
name: "mobile phone",
|
||||||
|
description: "Huawei Honor",
|
||||||
|
price: 200,
|
||||||
|
ratings: [
|
||||||
|
{ userId: "fg12cy", rate: 5 },
|
||||||
|
{ userId: "zwf8md", rate: 4.5 },
|
||||||
|
],
|
||||||
|
likes: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_id: "aegfal",
|
||||||
|
name: "Laptop",
|
||||||
|
description: "MacPro: System Darwin",
|
||||||
|
price: 2500,
|
||||||
|
ratings: [],
|
||||||
|
likes: ["fg12cy"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_id: "hedfcg",
|
||||||
|
name: "TV",
|
||||||
|
description: "Smart TV:Procaster",
|
||||||
|
price: 400,
|
||||||
|
ratings: [{ userId: "fg12cy", rate: 5 }],
|
||||||
|
likes: ["fg12cy"],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
Imagina que estás obteniendo la colección de usuarios anterior de una base de datos MongoDB.
|
||||||
|
a. Crear una función llamada signUp que permita al usuario añadirse a la colección. Si el usuario existe, informar al usuario que ya tiene una cuenta.
|
||||||
|
b. Crear una función llamada signIn que permita al usuario iniciar sesión en la aplicación
|
||||||
|
|
||||||
|
3. El array de productos tiene tres elementos y cada uno de ellos tiene seis propiedades.
|
||||||
|
a. Crear una función llamada rateProduct que califique el producto
|
||||||
|
b. Crear una función llamada averageRating que calcule la valoración media de un producto
|
||||||
|
|
||||||
|
4. Crear una función llamada likeProduct. Esta función ayuda a dar un like al producto. Si no le gusta eliminar el like y si le gusta darle like
|
||||||
|
|
||||||
|
🎉 ¡FELICITACIONES! 🎉
|
||||||
|
|
||||||
|
[<< Día 7](../dia_07_Funciones/dia_07_funciones.md) | [Día 9 >>](../dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md)
|
@ -0,0 +1,540 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1> 30 Días de JavaScript: Expresiones Regulares</h1>
|
||||||
|
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
|
||||||
|
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
|
||||||
|
</a>
|
||||||
|
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
|
||||||
|
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<sub>Autor:
|
||||||
|
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
|
||||||
|
<small> Enero, 2020</small>
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[<< Día 11](../dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md) | [Día 13>>](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- [📘 Día 12](#📘-día-12)
|
||||||
|
- [Expresiones Regulares](#expresiones-regulares)
|
||||||
|
- [Parámetros RegExp](#parámetros-regexp)
|
||||||
|
- [Patrón](#patrón)
|
||||||
|
- [Banderas](#banderas)
|
||||||
|
- [Creación de un patrón con el constructor RegExp](#creación-de-un-patrón-con-el-constructor-regexp)
|
||||||
|
- [Creación de un patrón sin el constructor RegExp](#creación-de-un-patrón-sin-el-constructor-regexp)
|
||||||
|
- [Métodos del objeto RegExp](#métodos-del-objeto-regexp)
|
||||||
|
- [Pruebas de coincidencia](#pruebas-de-coincidencia)
|
||||||
|
- [Array que contiene todas las coincidencias](#array-que-contiene-todas-las-coincidencias)
|
||||||
|
- [Sustitución de una subcadena](#sustitución-de-una-subcadena)
|
||||||
|
- [Corchetes](#corchetes)
|
||||||
|
- [Caracter Escape (\\) en RegExp](#caracter-escape--en-regexp)
|
||||||
|
- [Una o más veces(+)](#una-o-más-veces)
|
||||||
|
- [Punto(.)](#punto)
|
||||||
|
- [Cero o más veces(\*)](#cero-o-más-veces)
|
||||||
|
- [Cero o una vez (?)](#cero-o-una-vez)
|
||||||
|
- [Cuantificador en RegExp](#cuantificador-en-regexp)
|
||||||
|
- [Caret ^](#caret)
|
||||||
|
- [Coincidencia exacta](#coincidencia-exacta)
|
||||||
|
- [💻 Ejercicios](#💻-ejercicios)
|
||||||
|
- [Ejercicios: Nivel 1](#ejercicios-nivel-1)
|
||||||
|
- [Ejercicios: Nivel 2](#ejercicios-nivel-2)
|
||||||
|
- [Ejercicios: Nivel 3](#ejercicios-nivel-3)
|
||||||
|
|
||||||
|
# 📘 Día 12
|
||||||
|
|
||||||
|
## Expresiones Regulares
|
||||||
|
|
||||||
|
Una expresión regular o RegExp es un pequeño lenguaje de programación que ayuda a encontrar patrones en los datos. Una RegExp puede ser utilizada para comprobar si algún patrón existe en diferentes tipos de datos. Para usar RegExp en JavaScript, podemos usar el constructor RegExp o podemos declarar un patrón RegExp usando dos barras inclinadas seguidas de una bandera. Podemos crear un patrón de dos maneras.
|
||||||
|
|
||||||
|
Para declarar una cadena de caracteres utilizamos una comilla simple, una comilla doble y un signo de retroceso; para declarar una expresión regular utilizamos dos barras inclinadas y una bandera opcional. La bandera puede ser g, i, m, s, u o y.
|
||||||
|
|
||||||
|
### Parámetros RegExp
|
||||||
|
|
||||||
|
Una expresión regular toma dos parámetros. Un patrón de búsqueda requerido y una bandera opcional.
|
||||||
|
|
||||||
|
#### Patrón
|
||||||
|
|
||||||
|
Un patrón puede ser un texto o cualquier forma de patrón que tenga algún tipo de similitud. Por ejemplo, la palabra "spam" en un correo electrónico podría ser un patrón que nos interesa buscar en un correo electrónico o un formato de número de teléfono puede ser de nuestro interés para buscar.
|
||||||
|
|
||||||
|
#### Banderas
|
||||||
|
|
||||||
|
Las banderas son parámetros opcionales en una expresión regular que determinan el tipo de búsqueda. Veamos algunas de las banderas:
|
||||||
|
|
||||||
|
- g: una bandera global que significa buscar un patrón en todo el texto
|
||||||
|
- i: indicador de insensibilidad a las mayúsculas y minúsculas (busca tanto en minúsculas como en mayúsculas)
|
||||||
|
- m: multilínea
|
||||||
|
|
||||||
|
### Creación de un patrón con el constructor RegExp
|
||||||
|
|
||||||
|
Declarar una expresión regular sin bandera global y sin distinguir entre mayúsculas y minúsculas.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// sin bandera
|
||||||
|
let pattern = "love";
|
||||||
|
let regEx = new RegExp(pattern);
|
||||||
|
```
|
||||||
|
|
||||||
|
Declarar una expresión regular con un indicador global y un indicador de insensibilidad a las mayúsculas y minúsculas.
|
||||||
|
|
||||||
|
```js
|
||||||
|
let pattern = "love";
|
||||||
|
let flag = "gi";
|
||||||
|
let regEx = new RegExp(pattern, flag);
|
||||||
|
```
|
||||||
|
|
||||||
|
Declarar un patrón regex usando el objeto RegExp. Escribir el patrón y la bandera dentro del constructor RegExp
|
||||||
|
|
||||||
|
```js
|
||||||
|
let regEx = new RegExp("love", "gi");
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creación de un patrón sin el constructor RegExp
|
||||||
|
|
||||||
|
Declarar una expresión regular con un indicador global y un indicador de insensibilidad a las mayúsculas y minúsculas.
|
||||||
|
|
||||||
|
```js
|
||||||
|
let regEx = /love/gi;
|
||||||
|
```
|
||||||
|
|
||||||
|
La expresión regular anterior es la misma que creamos con el constructor RegExp
|
||||||
|
|
||||||
|
```js
|
||||||
|
let regEx = new RegExp("love", "gi");
|
||||||
|
```
|
||||||
|
|
||||||
|
### Métodos del objeto RegExp
|
||||||
|
|
||||||
|
Veamos algunos de los métodos RegExp
|
||||||
|
|
||||||
|
#### Pruebas de coincidencia
|
||||||
|
|
||||||
|
_test()_:Comprueba si hay una coincidencia en una cadena. Devuelve verdadero o falso.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const str = "I love JavaScript";
|
||||||
|
const pattern = /love/;
|
||||||
|
const result = pattern.test(str);
|
||||||
|
console.log(result);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
true
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Array que contiene todas las coincidencias
|
||||||
|
|
||||||
|
_match()_:Retorna un array que contiene todas las coincidencias, incluyendo los grupos de captura, o null si no se encuentra ninguna coincidencia.
|
||||||
|
Si no utilizamos una bandera global, match() retorna un array que contiene el patrón, el índice, la entrada y el grupo.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const str = "I love JavaScript";
|
||||||
|
const pattern = /love/;
|
||||||
|
const result = str.match(pattern);
|
||||||
|
console.log(result);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
["love", index: 2, input: "I love JavaScript", groups: undefined]
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const str = "I love JavaScript";
|
||||||
|
const pattern = /love/g;
|
||||||
|
const result = str.match(pattern);
|
||||||
|
console.log(result);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
["love"]
|
||||||
|
```
|
||||||
|
|
||||||
|
_search()_: Busca una coincidencia en una cadena. Devuelve el índice de la coincidencia, o -1 si la búsqueda falla.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const str = "I love JavaScript";
|
||||||
|
const pattern = /love/g;
|
||||||
|
const result = str.search(pattern);
|
||||||
|
console.log(result);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
2
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Sustitución de una subcadena
|
||||||
|
|
||||||
|
_replace()_: Ejecuta una búsqueda de una coincidencia en una cadena, y reemplaza la subcadena coincidente con una subcadena de reemplazo.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt =
|
||||||
|
"Python es el lenguaje más bello que ha creado el ser humano.\
|
||||||
|
Recomiendo python para un primer lenguaje de programación";
|
||||||
|
|
||||||
|
matchReplaced = txt.replace(/Python|python/, "JavaScript");
|
||||||
|
console.log(matchReplaced);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
JavaScript es el lenguaje más bello que ha creado el ser humano. Recomiendo python como primer lenguaje de programación
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt =
|
||||||
|
"Python es el lenguaje más bello que ha creado el ser humano.\
|
||||||
|
Recomiendo python para un primer lenguaje de programación";
|
||||||
|
|
||||||
|
matchReplaced = txt.replace(/Python|python/g, "JavaScript");
|
||||||
|
console.log(matchReplaced);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
JavaScript es el lenguaje más bello que ha creado el ser humano. Recomiendo JavaScript para un primer lenguaje de programación
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt =
|
||||||
|
"Python es el lenguaje más bello que ha creado el ser humano.\
|
||||||
|
Recomiendo python para un primer lenguaje de programación";
|
||||||
|
|
||||||
|
matchReplaced = txt.replace(/Python/gi, "JavaScript");
|
||||||
|
console.log(matchReplaced);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
JavaScript es el lenguaje más bello que ha creado el ser humano. Recomiendo JavaScript para un primer lenguaje de programación
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt =
|
||||||
|
"%So%y p%r%%of%%es%or%a% y m%e %% enc%an%ta en%se%ña%r.\
|
||||||
|
N%o h%a%y n%a%d%a mas g%r%at%if%icante q%ue e%d%uc%a%r y c%a%p%ac%i%ta%r %a l%a g%e%n%t%e.\
|
||||||
|
L%a e%n%%señ%anza m%e %p%ar%ec%e ma%s% i%n%te%r%esa%nt%e que %cu%alq%uie%r %otro t%ra%ba%jo.\
|
||||||
|
E%s%t%o te mo%ti%v%a a s%er p%ro%fe%sor.";
|
||||||
|
|
||||||
|
matches = txt.replace(/%/g, "");
|
||||||
|
console.log(matches);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Soy profesora y me encanta enseñar. No hay nada más gratificante que educar y capacitar a la gente. La enseñanza me parece más interesante que cualquier otro trabajo. ¿Esto te motiva a ser profesor?
|
||||||
|
```
|
||||||
|
|
||||||
|
- []: Un conjunto de caracteres
|
||||||
|
- [a-c] significa, a o b o c
|
||||||
|
- [a-z] significa, cualquier letra de la a a la z
|
||||||
|
- [A-Z] significa, cualquier carácter de la A a la Z
|
||||||
|
- [0-3] significa, 0 o 1 o 2 o 3
|
||||||
|
- [0-9] significa cualquier número del 0 al 9
|
||||||
|
- [A-Za-z0-9] cualquier carácter que sea de la a a la z, de la A a la Z, del 0 al 9
|
||||||
|
- \\: utiliza para evadir caracteres especiales
|
||||||
|
- \d significa: coincide cuando el string contiene dígitos (numeros del 0-9)
|
||||||
|
- \D significa: coincide cuando el string no contiene dígitos
|
||||||
|
- . : cualquier carácter excepto la nueva línea (\n)
|
||||||
|
- ^: comienza con
|
||||||
|
- r'^substring' eg r'^love', una frase que comienza con la palabra love
|
||||||
|
- r'[^abc] significa no a, no b, no c.
|
||||||
|
- $: termina con
|
||||||
|
- r'substring$' eg r'love$', la frase termina con una palabra love
|
||||||
|
- \*: cero o más veces
|
||||||
|
- r'[a]\*' significa un opcional o puede ocurrir muchas veces.
|
||||||
|
- +: una o más veces
|
||||||
|
- r'[a]+' significa al menos una o más veces
|
||||||
|
- ?: cero o una vez
|
||||||
|
- r'[a]?' significa cero veces o una vez
|
||||||
|
- \b: Buscador de palabras, coincide con el principio o el final de una palabra
|
||||||
|
- {3}: Exactamente 3 caracteres
|
||||||
|
- {3,}: Al menos 3 caracteres
|
||||||
|
- {3,8}: De 3 a 8 caracteres
|
||||||
|
- |: O bien
|
||||||
|
- r'apple|banana' significa tanto una manzana como un plátano
|
||||||
|
- (): Capturar y agrupar
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Usemos un ejemplo para aclarar los metacaracteres anteriores
|
||||||
|
|
||||||
|
### Corchetes
|
||||||
|
|
||||||
|
Usemos el corchete para incluir las minúsculas y las mayúsculas
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = "[Aa]pple"; // este corchete significa A o a
|
||||||
|
const txt =
|
||||||
|
"Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away. ";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
["Apple", index: 0, input: "Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away.", groups: undefined]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /[Aa]pple/g; // este corchete significa A o a
|
||||||
|
const txt =
|
||||||
|
"Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. ";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
["Apple", "apple"]
|
||||||
|
```
|
||||||
|
|
||||||
|
Si queremos buscar la banana, escribimos el patrón de la siguiente manera:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /[Aa]pple|[Bb]anana/g; // este corchete significa A o a
|
||||||
|
const txt =
|
||||||
|
"Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. Banana is easy to eat too.";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
["Apple", "banana", "apple", "banana", "Banana"]
|
||||||
|
```
|
||||||
|
|
||||||
|
Utilizando el corchete y el operador or , conseguimos extraer Apple, apple, Banana y banana.
|
||||||
|
|
||||||
|
### Caracter Escape (\\) en RegExp
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /\d/g; // d es un carácter especial que significa dígitos
|
||||||
|
const txt = "This regular expression example was made in January 12, 2020.";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches); // ["1", "2", "2", "0", "2", "0"], esto es lo que no queremos
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /\d+/g; // d es un carácter especial que significa dígitos
|
||||||
|
const txt = "This regular expression example was made in January 12, 2020.";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches); // ["12", "2020"], esto es lo que no queremos
|
||||||
|
```
|
||||||
|
|
||||||
|
### Una o más veces(+)
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /\d+/g; // d es un carácter especial que significa dígitos
|
||||||
|
const txt = "This regular expression example was made in January 12, 2020.";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); // ["12", "2020"], esto es lo que no queremos
|
||||||
|
```
|
||||||
|
|
||||||
|
### Punto(.)
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /[a]./g; // este corchete significa a y . significa cualquier carácter excepto nueva línea
|
||||||
|
const txt = "Apple and banana are fruits";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches); // ["an", "an", "an", "a ", "ar"]
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /[a].+/g; // . cualquier carácter, + cualquier carácter una o más veces
|
||||||
|
const txt = "Apple and banana are fruits";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches); // ['and banana are fruits']
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cero o más veces(\*)
|
||||||
|
|
||||||
|
Cero o muchas veces. El patrón puede no ocurrir o puede ocurrir muchas veces.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const pattern = /[a].*/g; //. cualquier carácter, + cualquier carácter una o más veces
|
||||||
|
const txt = "Apple and banana are fruits";
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches); // ['and banana are fruits']
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cero o una vez (?)
|
||||||
|
|
||||||
|
Cero o una vez. El patrón puede no ocurrir o puede ocurrir una vez.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt =
|
||||||
|
"I am not sure if there is a convention how to write the word e-mail.\
|
||||||
|
Some people write it email others may write it as Email or E-mail.";
|
||||||
|
const pattern = /[Ee]-?mail/g; // ? significa que es opcional
|
||||||
|
matches = txt.match(pattern);
|
||||||
|
|
||||||
|
console.log(matches); // ["e-mail", "email", "Email", "E-mail"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cuantificador en RegExp
|
||||||
|
|
||||||
|
Podemos especificar la longitud de la subcadena que buscamos en un texto, utilizando una llave. Veamos cómo utilizar los cuantificadores RegExp. Imaginemos que estamos interesados en una subcadena cuya longitud es de 4 caracteres
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt = "This regular expression example was made in December 6, 2019.";
|
||||||
|
const pattern = /\\b\w{4}\b/g; // palabras de cuatro caracteres exactamente
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); //['This', 'made', '2019']
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt = "This regular expression example was made in December 6, 2019.";
|
||||||
|
const pattern = /\b[a-zA-Z]{4}\b/g; // palabras de cuatro caracteres exactos sin números
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); //['This', 'made']
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt = "This regular expression example was made in December 6, 2019.";
|
||||||
|
const pattern = /\d{4}/g; // un número y exactamente cuatro dígitos
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); // ['2019']
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt = "This regular expression example was made in December 6, 2019.";
|
||||||
|
const pattern = /\d{1,4}/g; // 1 to 4
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); // ['6', '2019']
|
||||||
|
```
|
||||||
|
|
||||||
|
### Caret ^
|
||||||
|
|
||||||
|
- Comienza con
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt = "This regular expression example was made in December 6, 2019.";
|
||||||
|
const pattern = /^This/; // ^ significa que comienza con
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); // ['This']
|
||||||
|
```
|
||||||
|
|
||||||
|
- Negación
|
||||||
|
|
||||||
|
```js
|
||||||
|
const txt = "This regular expression example was made in December 6, 2019.";
|
||||||
|
const pattern = /[^A-Za-z,. ]+/g; // ^ en un conjunto de caracteres significa negación, no de la A a la Z, no de la a a la z, sin espacio, sin coma y sin punto
|
||||||
|
const matches = txt.match(pattern);
|
||||||
|
console.log(matches); // ["6", "2019"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Coincidencia exacta
|
||||||
|
|
||||||
|
Debe tener ^ que empieza y $ que es el final.
|
||||||
|
|
||||||
|
```js
|
||||||
|
let pattern = /^[A-Z][a-z]{3,12}$/;
|
||||||
|
let name = "Asabeneh";
|
||||||
|
let result = pattern.test(name);
|
||||||
|
|
||||||
|
console.log(result); // true
|
||||||
|
```
|
||||||
|
|
||||||
|
🌕 Estás llegando lejos. Sigue avanzando. Ahora, estás súper cargado con el poder de la expresión regular. Tienes el poder de extraer y limpiar cualquier tipo de texto y puedes dar sentido a los datos no estructurados. Acabas de completar los retos del día 12 y llevas 12 pasos de tu camino a la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
|
||||||
|
|
||||||
|
## 💻 Ejercicios
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 1
|
||||||
|
|
||||||
|
1. Calcula los ingresos anuales totales de la persona a partir del siguiente texto. 'Gana 4000 euros de sueldo al mes, 10000 euros de bonificación anual, 5500 euros de cursos online al mes'.
|
||||||
|
1. La posición de algunas partículas en el eje horizontal x -12, -4, -3 y -1 en la dirección negativa, 0 en el origen, 4 y 8 en la dirección positiva. Extrae estos números y encuentra la distancia entre las dos partes más lejanas.
|
||||||
|
|
||||||
|
```js
|
||||||
|
points = ["-1", "2", "-4", "-3", "-1", "0", "4", "8"];
|
||||||
|
sortedPoints = [-4, -3, -1, -1, 0, 2, 4, 8];
|
||||||
|
distance = 12;
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Escribir un patrón que identifique si una cadena es una variable JavaScript válida
|
||||||
|
|
||||||
|
```sh
|
||||||
|
is_valid_variable('first_name') # True
|
||||||
|
is_valid_variable('first-name') # False
|
||||||
|
is_valid_variable('1first_name') # False
|
||||||
|
is_valid_variable('firstname') # True
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 2
|
||||||
|
|
||||||
|
1. Escriba una función llamada _tenMostFrequentWords_ que obtenga las diez palabras más frecuentes de una cadena?
|
||||||
|
|
||||||
|
```js
|
||||||
|
paragraph = `I love teaching. If you do not love teaching what else can you love. I love Python if you do not love something which can give you all the capabilities to develop an application what else can you love.`;
|
||||||
|
console.log(tenMostFrequentWords(paragraph));
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[
|
||||||
|
{word:'love', count:6},
|
||||||
|
{word:'you', count:5},
|
||||||
|
{word:'can', count:3},
|
||||||
|
{word:'what', count:2},
|
||||||
|
{word:'teaching', count:2},
|
||||||
|
{word:'not', count:2},
|
||||||
|
{word:'else', count:2},
|
||||||
|
{word:'do', count:2},
|
||||||
|
{word:'I', count:2},
|
||||||
|
{word:'which', count:1},
|
||||||
|
{word:'to', count:1},
|
||||||
|
{word:'the', count:1},
|
||||||
|
{word:'something', count:1},
|
||||||
|
{word:'if', count:1},
|
||||||
|
{word:'give', count:1},
|
||||||
|
{word:'develop',count:1},
|
||||||
|
{word:'capabilities',count:1},
|
||||||
|
{word:'application', count:1},
|
||||||
|
{word:'an',count:1},
|
||||||
|
{word:'all',count:1},
|
||||||
|
{word:'Python',count:1},
|
||||||
|
{word:'If',count:1}]
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log(tenMostFrequentWords(paragraph, 10));
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[{word:'love', count:6},
|
||||||
|
{word:'you', count:5},
|
||||||
|
{word:'can', count:3},
|
||||||
|
{word:'what', count:2},
|
||||||
|
{word:'teaching', count:2},
|
||||||
|
{word:'not', count:2},
|
||||||
|
{word:'else', count:2},
|
||||||
|
{word:'do', count:2},
|
||||||
|
{word:'I', count:2},
|
||||||
|
{word:'which', count:1}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ejercicios: Nivel 3
|
||||||
|
|
||||||
|
1. Escribe una función que limpie el texto. Limpia el siguiente texto. Después de la limpieza, cuente tres palabras más frecuentes en la cadena.
|
||||||
|
|
||||||
|
```js
|
||||||
|
sentence = `%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothing; &as& mo@re rewarding as educa@ting &and& @emp%o@wering peo@ple. ;I found tea@ching m%o@re interesting tha@n any other %jo@bs. %Do@es thi%s mo@tivate yo@u to be a tea@cher!?`;
|
||||||
|
console.log(cleanText(sentence));
|
||||||
|
```
|
||||||
|
|
||||||
|
````sh
|
||||||
|
I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
|
||||||
|
```
|
||||||
|
2. Escriba una función que encuentre las palabras más frecuentes. Después de la limpieza, cuente tres palabras más frecuentes en la cadena.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log(mostFrequentWords(cleanedText))
|
||||||
|
[{word:'I', count:3}, {word:'teaching', count:2}, {word:'teacher', count:2}]
|
||||||
|
````
|
||||||
|
|
||||||
|
🎉 ¡FELICITACIONES! 🎉
|
||||||
|
|
||||||
|
[<< Día 11](../dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md) | [Día 13 >>](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md)
|
@ -0,0 +1,358 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1> 30 Días de JavaScript: Métodos del Objeto Console</h1>
|
||||||
|
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
|
||||||
|
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
|
||||||
|
</a>
|
||||||
|
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
|
||||||
|
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<sub>Autor:
|
||||||
|
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
|
||||||
|
<small> Enero, 2020</small>
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[<< Día 12](../dia_12_Expresiones_Regulares/dia_12_expresiones_regulares.md) | [Día 14>>](../dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- [Día 13](#día-13)
|
||||||
|
- [Métodos del Objeto Console](#métodos-del-objeto-console)
|
||||||
|
- [console.log()](#consolelog)
|
||||||
|
- [console.warn()](#consolewarn)
|
||||||
|
- [console.error()](#consoleerror)
|
||||||
|
- [console.table()](#consoletable)
|
||||||
|
- [console.time()](#consoletime)
|
||||||
|
- [console.info()](#consoleinfo)
|
||||||
|
- [console.assert()](#consoleassert)
|
||||||
|
- [console.group()](#consolegroup)
|
||||||
|
- [console.count()](#consolecount)
|
||||||
|
- [console.clear()](#consoleclear)
|
||||||
|
- [Ejercicios](#ejercicios)
|
||||||
|
- [Ejercicios:Nivel 1](#ejerciciosnivel-1)
|
||||||
|
- [Ejercicios:Nivel 2](#ejerciciosnivel-2)
|
||||||
|
- [Ejercicios:Nivel 3](#ejerciciosnivel-3)
|
||||||
|
|
||||||
|
# Día 13
|
||||||
|
|
||||||
|
## Métodos del Objeto Console
|
||||||
|
|
||||||
|
En esta sección, trataremos sobre console y los métodos de los objetos console. Los principiantes generalmente no saben cuál usar: console.log(), document.write() o document.getElementById.
|
||||||
|
|
||||||
|
Usamos métodos de objetos console para mostrar la salida en la consola del navegador y usamos document.write para mostrar la salida en el documento del navegador (view port). Ambos métodos se utilizan únicamente con fines de prueba y depuración. El método console es la herramienta de prueba y depuración más popular en el navegador. Usamos document.getElementById() cuando queremos interactuar con el DOM usando JavaScript. Trataremos el tema del DOM en otra sección.
|
||||||
|
|
||||||
|
Además del famoso método console.log(), console proporciona otros métodos más.
|
||||||
|
|
||||||
|
### console.log()
|
||||||
|
|
||||||
|
Usamos console.log() para mostrar la salida en la consola del navegador. Podemos sustituir valores y también podemos estilizar la salida del registro usando %c.
|
||||||
|
|
||||||
|
- Mostrando la salida en la consola del navegador
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log("30 Days of JavaScript");
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
30 Days of JavaScript
|
||||||
|
```
|
||||||
|
|
||||||
|
- Sustitución
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log("%d %s of JavaScript", 30, "Days");
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
30 Days of JavaScript
|
||||||
|
```
|
||||||
|
|
||||||
|
- CSS
|
||||||
|
|
||||||
|
Podemos darle estilo al mensaje de registro usando css. Copia el siguiente código y pégalo en la consola del navegador para ver el resultado.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log("%c30 Days Of JavaScript", "color:green"); // la salida del registro es verde
|
||||||
|
console.log(
|
||||||
|
"%c30 Days%c %cOf%c %cJavaScript%c",
|
||||||
|
"color:green",
|
||||||
|
"",
|
||||||
|
"color:red",
|
||||||
|
"",
|
||||||
|
"color:yellow"
|
||||||
|
); // salida del registro texto verde rojo y amarillo
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.warn()
|
||||||
|
|
||||||
|
Usamos console.warn() para dar avisos en el navegador. Por ejemplo para informar o avisar de la depreciación de la versión de un paquete o de malas prácticas. Copia el siguiente código y pégalo en la consola del navegador para ver los mensajes de advertencia.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.warn("This is a warning");
|
||||||
|
console.warn(
|
||||||
|
"You are using React. Do not touch the DOM. Virtual DOM will take care of handling the DOM!"
|
||||||
|
);
|
||||||
|
console.warn("Warning is different from error");
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.error()
|
||||||
|
|
||||||
|
El método console.error() muestra un mensaje de error.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.error("This is an error message");
|
||||||
|
console.error("We all make mistakes");
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.table()
|
||||||
|
|
||||||
|
El método console.table() muestra los datos como una tabla en la consola. Muestra los datos en forma de tabla. El método console.table() toma un argumento requerido data, que debe ser un array o un objeto, y un parámetro adicional opcional columns.
|
||||||
|
|
||||||
|
Empecemos con un simple array. El código siguiente muestra una tabla con dos columnas. Una columna índice para mostrar el índice y una columna valor para mostrar los nombres
|
||||||
|
|
||||||
|
```js
|
||||||
|
const names = ["Asabeneh", "Brook", "David", "John"];
|
||||||
|
console.table(names);
|
||||||
|
```
|
||||||
|
|
||||||
|
Comprobemos también el resultado de un objeto. Esto crea una tabla con dos columnas: una columna índice que contiene las claves y una columna valor que contiene los valores del objeto.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const user = {
|
||||||
|
name: "Asabeneh",
|
||||||
|
title: "Programmer",
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
age: 250,
|
||||||
|
};
|
||||||
|
console.table(user);
|
||||||
|
```
|
||||||
|
|
||||||
|
Comprueba el resto de los ejemplos copiando y pegando en la consola del navegador.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const countries = [
|
||||||
|
["Finland", "Helsinki"],
|
||||||
|
["Sweden", "Stockholm"],
|
||||||
|
["Norway", "Oslo"],
|
||||||
|
];
|
||||||
|
console.table(countries);
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const users = [
|
||||||
|
{
|
||||||
|
name: "Asabeneh",
|
||||||
|
title: "Programmer",
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
age: 250,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Eyob",
|
||||||
|
title: "Teacher",
|
||||||
|
country: "Sweden",
|
||||||
|
city: "London",
|
||||||
|
age: 25,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Asab",
|
||||||
|
title: "Instructor",
|
||||||
|
country: "Norway",
|
||||||
|
city: "Oslo",
|
||||||
|
age: 22,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Matias",
|
||||||
|
title: "Developer",
|
||||||
|
country: "Denmark",
|
||||||
|
city: "Copenhagen",
|
||||||
|
age: 28,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
console.table(users);
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.time()
|
||||||
|
|
||||||
|
Inicia un temporizador que se puede utilizar para controlar el tiempo que dura una operación. Puedes dar a cada temporizador un nombre único, y puedes tener hasta 10.000 temporizadores funcionando en una página determinada. Cuando llame a console.timeEnd() con el mismo nombre, el navegador mostrará el tiempo, en milisegundos, que ha transcurrido desde que se inició el temporizador.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const countries = [
|
||||||
|
["Finland", "Helsinki"],
|
||||||
|
["Sweden", "Stockholm"],
|
||||||
|
["Norway", "Oslo"],
|
||||||
|
];
|
||||||
|
|
||||||
|
console.time("Regular for loop");
|
||||||
|
for (let i = 0; i < countries.length; i++) {
|
||||||
|
console.log(countries[i][0], countries[i][1]);
|
||||||
|
}
|
||||||
|
console.timeEnd("Regular for loop");
|
||||||
|
|
||||||
|
console.time("for of loop");
|
||||||
|
for (const [name, city] of countries) {
|
||||||
|
console.log(name, city);
|
||||||
|
}
|
||||||
|
console.timeEnd("for of loop");
|
||||||
|
|
||||||
|
console.time("forEach loop");
|
||||||
|
countries.forEach(([name, city]) => {
|
||||||
|
console.log(name, city);
|
||||||
|
});
|
||||||
|
console.timeEnd("forEach loop");
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Finland Helsinki
|
||||||
|
Sweden Stockholm
|
||||||
|
Norway Oslo
|
||||||
|
Regular for loop: 0.34716796875ms
|
||||||
|
Finland Helsinki
|
||||||
|
Sweden Stockholm
|
||||||
|
Norway Oslo
|
||||||
|
for of loop: 0.26806640625ms
|
||||||
|
Finland Helsinki
|
||||||
|
Sweden Stockholm
|
||||||
|
Norway Oslo
|
||||||
|
forEach loop: 0.358154296875ms
|
||||||
|
```
|
||||||
|
|
||||||
|
De acuerdo con la salida anterior, el bucle for regular es más lento que el bucle for of o forEach.
|
||||||
|
|
||||||
|
### console.info()
|
||||||
|
|
||||||
|
Muestra un mensaje de información en la consola del navegador.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.info("30 Days Of JavaScript challenge is trending on Github");
|
||||||
|
console.info("30 Days Of fullStack challenge might be released");
|
||||||
|
console.info("30 Days Of HTML and CSS challenge might be released");
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.assert()
|
||||||
|
|
||||||
|
El método console.assert() escribe un mensaje de error en la consola si la afirmación es falsa. Si la afirmación es verdadera, no pasa nada. El primer parámetro es una expresión de aserción. Si esta expresión es falsa, se mostrará un mensaje de error de aserción fallida.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.assert(4 > 3, "4 is greater than 3"); // no hay resultado
|
||||||
|
console.assert(3 > 4, "3 is not greater than 4"); // Aserción fallida: 3 no es mayor que 4
|
||||||
|
|
||||||
|
for (let i = 0; i <= 10; i += 1) {
|
||||||
|
let errorMessage = `${i} is not even`;
|
||||||
|
console.log("the # is " + i);
|
||||||
|
console.assert(i % 2 === 0, { number: i, errorMessage: errorMessage });
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.group()
|
||||||
|
|
||||||
|
El console.group() puede ayudar a agrupar diferentes grupos de registro. Copie el siguiente código y péguelo en la consola del navegador para los grupos.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const names = ["Asabeneh", "Brook", "David", "John"];
|
||||||
|
const countries = [
|
||||||
|
["Finland", "Helsinki"],
|
||||||
|
["Sweden", "Stockholm"],
|
||||||
|
["Norway", "Oslo"],
|
||||||
|
];
|
||||||
|
const user = {
|
||||||
|
name: "Asabeneh",
|
||||||
|
title: "Programmer",
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
age: 250,
|
||||||
|
};
|
||||||
|
const users = [
|
||||||
|
{
|
||||||
|
name: "Asabeneh",
|
||||||
|
title: "Programmer",
|
||||||
|
country: "Finland",
|
||||||
|
city: "Helsinki",
|
||||||
|
age: 250,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Eyob",
|
||||||
|
title: "Teacher",
|
||||||
|
country: "Sweden",
|
||||||
|
city: "London",
|
||||||
|
age: 25,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Asab",
|
||||||
|
title: "Instructor",
|
||||||
|
country: "Norway",
|
||||||
|
city: "Oslo",
|
||||||
|
age: 22,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Matias",
|
||||||
|
title: "Developer",
|
||||||
|
country: "Denmark",
|
||||||
|
city: "Copenhagen",
|
||||||
|
age: 28,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
console.group("Names");
|
||||||
|
console.log(names);
|
||||||
|
console.groupEnd();
|
||||||
|
|
||||||
|
console.group("Countries");
|
||||||
|
console.log(countries);
|
||||||
|
console.groupEnd();
|
||||||
|
|
||||||
|
console.group("Users");
|
||||||
|
console.log(user);
|
||||||
|
console.log(users);
|
||||||
|
console.groupEnd();
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.count()
|
||||||
|
|
||||||
|
Imprime el número de veces que se llama a console.count(). Toma un parámetro de etiqueta de cadena. Es muy útil para contar el número de veces que se llama a una función. En el siguiente ejemplo, el método console.count() se ejecutará tres veces
|
||||||
|
|
||||||
|
```js
|
||||||
|
const func = () => {
|
||||||
|
console.count("Function has been called");
|
||||||
|
};
|
||||||
|
func();
|
||||||
|
func();
|
||||||
|
func();
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Function has been called: 1
|
||||||
|
Function has been called: 2
|
||||||
|
Function has been called: 3
|
||||||
|
```
|
||||||
|
|
||||||
|
### console.clear()
|
||||||
|
|
||||||
|
El console.clear() limpia la consola del navegador.
|
||||||
|
|
||||||
|
🌕 Sigue con el buen trabajo. Sigue esforzándote, ¡el cielo es el límite! Acabas de completar el día 13 de desafíos y llevas 13 pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
|
||||||
|
|
||||||
|
## Ejercicios
|
||||||
|
|
||||||
|
### Ejercicios:Nivel 1
|
||||||
|
|
||||||
|
1. Mostrar la matriz de países como una tabla
|
||||||
|
2. Mostrar el objeto países como una tabla
|
||||||
|
3. Utilice console.group() para agrupar los registros
|
||||||
|
|
||||||
|
### Ejercicios:Nivel 2
|
||||||
|
|
||||||
|
1. 10 > 2 \* 10 use console.assert()
|
||||||
|
2. Escribe un mensaje de advertencia utilizando console.warn()
|
||||||
|
3. Escribe un mensaje de error utilizando console.error()
|
||||||
|
|
||||||
|
### Ejercicios:Nivel 3
|
||||||
|
|
||||||
|
1. Comprueba la diferencia de velocidad entre los siguientes bucles: while, for, for of, forEach
|
||||||
|
|
||||||
|
🎉 ¡FELICITACIONES! 🎉
|
||||||
|
|
||||||
|
[<< Día 12](../dia_12_Expresiones_Regulares/dia_12_expresiones_regulares.md) | [Día 14>>](../dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md)
|
@ -0,0 +1,193 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1> 30 Días de JavaScript: Manejo de Errores</h1>
|
||||||
|
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
|
||||||
|
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
|
||||||
|
</a>
|
||||||
|
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
|
||||||
|
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<sub>Autor:
|
||||||
|
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
|
||||||
|
<small> Enero, 2020</small>
|
||||||
|
</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[<< Día 13](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md) | [Día 15>>](..)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- [Día 14](#día-14)
|
||||||
|
- [Manejo de Errores](#manejo-de-errores)
|
||||||
|
- [Tipo de Error](#tipo-de-error)
|
||||||
|
- [Ejercicios](#ejercicios)
|
||||||
|
- [Ejercicios:Nivel 1](#ejerciciosnivel-1)
|
||||||
|
- [Ejercicios: Nivel 2](#ejerciciosnivel-2)
|
||||||
|
- [Ejercicios:Nivel 3](#ejerciciosnivel-3)
|
||||||
|
|
||||||
|
# Día 14
|
||||||
|
|
||||||
|
## Manejo de Errores
|
||||||
|
|
||||||
|
JavaScript es un lenguaje de tipado libre. Algunas veces obtendrá un error en tiempo de ejecución cuando intente acceder a una variable no definida o llamar a una función no definida, etc.
|
||||||
|
|
||||||
|
JavaScript, al igual que python o Java, proporciona un mecanismo de gestión de errores para capturar los errores en tiempo de ejecución mediante el bloque try-catch-finally.
|
||||||
|
|
||||||
|
```js
|
||||||
|
try {
|
||||||
|
// código que puede arrojar un error
|
||||||
|
} catch (err) {
|
||||||
|
// código a ejecutar si se produce un error
|
||||||
|
} finally {
|
||||||
|
// código que se ejecutará independientemente de que se produzca un error o no
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**try**: envuelve el código sospechoso que puede arrojar un error en un bloque try. La sentencia try nos permite definir un bloque de código para que se compruebe si hay errores mientras se ejecuta.
|
||||||
|
|
||||||
|
**catch**: escribe código para hacer algo en el bloque catch cuando se produce un error. El bloque catch puede tener parámetros que le darán información sobre el error. El bloque Catch se utiliza para registrar un error o mostrar mensajes específicos al usuario.
|
||||||
|
|
||||||
|
**finally**: El bloque finally se ejecutará siempre, independientemente de que se produzca un error. El bloque finally puede utilizarse para completar la tarea restante o para restablecer las variables que puedan haber cambiado antes de que se produzca el error en el bloque try.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
```js
|
||||||
|
try {
|
||||||
|
let lastName = "Yetayeh";
|
||||||
|
let fullName = fistName + " " + lastName;
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ReferenceError: fistName no está definido
|
||||||
|
at <anonymous>:4:20
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
try {
|
||||||
|
let lastName = "Yetayeh";
|
||||||
|
let fullName = fistName + " " + lastName;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err); // podemos utilizar console.log() o console.error()
|
||||||
|
} finally {
|
||||||
|
console.log("In any case I will be executed");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ReferenceError: fistName no está definido
|
||||||
|
at <anonymous>:4:20
|
||||||
|
En cualquier caso se ejecutará
|
||||||
|
```
|
||||||
|
|
||||||
|
El bloque de captura toma un parámetro. Es habitual pasar e, err o error como parámetro al bloque catch. Este parámetro es un objeto y tiene las claves nombre y mensaje. Utilicemos el nombre y el mensaje.
|
||||||
|
|
||||||
|
```js
|
||||||
|
try {
|
||||||
|
let lastName = "Yetayeh";
|
||||||
|
let fullName = fistName + " " + lastName;
|
||||||
|
} catch (err) {
|
||||||
|
console.log("Name of the error", err.name);
|
||||||
|
console.log("Error message", err.message);
|
||||||
|
} finally {
|
||||||
|
console.log("In any case I will be executed");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Name of the error ReferenceError
|
||||||
|
Error message fistName is not defined
|
||||||
|
In any case I will be executed
|
||||||
|
```
|
||||||
|
|
||||||
|
throw: la sentencia throw nos permite crear un error personalizado. Podemos pasar una cadena, un número, un booleano o un objeto. Utilice la sentencia throw para lanzar una excepción. Cuando se lanza una excepción, la expresión especifica el valor de la excepción. Cada una de las siguientes acciones lanza una excepción:
|
||||||
|
|
||||||
|
```js
|
||||||
|
throw "Error2"; // genera una excepción con un valor de cadena
|
||||||
|
throw 42; // genera una excepción con el valor 42
|
||||||
|
throw true; // genera una excepción con el valor true
|
||||||
|
throw new Error("Required"); // genera un objeto de error con el mensaje de Requerido
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const throwErrorExampleFun = () => {
|
||||||
|
let message;
|
||||||
|
let x = prompt("Enter a number: ");
|
||||||
|
try {
|
||||||
|
if (x == "") throw "empty";
|
||||||
|
if (isNaN(x)) throw "not a number";
|
||||||
|
x = Number(x);
|
||||||
|
if (x < 5) throw "too low";
|
||||||
|
if (x > 10) throw "too high";
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
throwErrorExampleFun();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tipo de Error
|
||||||
|
|
||||||
|
- ReferenceError: Se ha producido una referencia ilegal. Se lanza un ReferenceError si utilizamos una variable que no ha sido declarada.
|
||||||
|
|
||||||
|
```js
|
||||||
|
let firstName = "Asabeneh";
|
||||||
|
let fullName = firstName + " " + lastName;
|
||||||
|
|
||||||
|
console.log(fullName);
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Uncaught ReferenceError: lastName is not defined
|
||||||
|
at <anonymous>:2:35
|
||||||
|
```
|
||||||
|
|
||||||
|
- SyntaxError: Se ha producido un error de sintaxis
|
||||||
|
|
||||||
|
```js
|
||||||
|
let square = 2 x 2
|
||||||
|
console.log(square)
|
||||||
|
|
||||||
|
console.log('Hello, world")
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Uncaught SyntaxError: Unexpected identifier
|
||||||
|
```
|
||||||
|
|
||||||
|
- TypeError: Se ha producido un error sobre el tipo
|
||||||
|
|
||||||
|
```js
|
||||||
|
let num = 10;
|
||||||
|
console.log(num.toLowerCase());
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Uncaught TypeError: num.toLowerCase is not a function
|
||||||
|
at <anonymous>:2:17
|
||||||
|
```
|
||||||
|
|
||||||
|
Estos son algunos de los errores más comunes a los que te puedes enfrentar cuando escribes un código. Entender los errores puede ayudarte a saber qué errores has cometido y te ayudará a depurar tu código rápidamente.
|
||||||
|
|
||||||
|
🌕 Usted es impecable. Ahora, sabes cómo manejar los errores y puedes escribir una aplicación robusta que maneje entradas inesperadas del usuario. Acabas de completar los desafíos del día 14 y llevas 14 pasos en tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
|
||||||
|
|
||||||
|
## Ejercicios
|
||||||
|
|
||||||
|
### Ejercicios:Nivel 1
|
||||||
|
|
||||||
|
Practica
|
||||||
|
|
||||||
|
### Ejercicios:Nivel 2
|
||||||
|
|
||||||
|
Practica
|
||||||
|
|
||||||
|
### Ejercicios:Nivel 3
|
||||||
|
|
||||||
|
Practica
|
||||||
|
|
||||||
|
🎉 ¡FELICITACIONES! 🎉
|
||||||
|
|
||||||
|
[<< Día 13](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md) | [Día 15>>](..)
|
Loading…
Reference in new issue