Un aplauso para la estrella de este curso:
console.log 😂😂😂!..
Na es broma, pero lo he escrito tantas veces que anoche soñé con él
A un aporte tonto si se escribe solo la palabra log el editor te completa la sintaxis completa. 💪🏻💪🏻💪🏻
Introducción
Historia de JavaScript: ¿qué es ECMAScript?
¿Qué es el TC39?
Configuracion
Configurando nuestras herramientas
¿Qué se implementó en ES6?
ES6: let y const, y arrow functions
ES6: strings
ES6: parámetros por defecto
ES6: asignación de desestructuración
ES6: spread operator
Playground: Combina objetos JSON con el Spread Operator
ES6: object literals
ES6: promesas
ES6: clases
ES6: module
Playground: Obtén una lista de películas
ES6: generator
Playground: Generador de identificadores para michis
ES6: set-add
¿Qué se implementó en ES7?
ES7: exponentiation operator y array includes
¿Qué se implementó en ES8?
ES8: object entries y object values
ES8: string padding y trailing commas
ES8: funciones asíncronas
¿Qué se implementó en ES9?
ES9: expresiones regulares
ES9: Promise.finally
¿Qué se implementó en ES10?
ES10: flat-map y trimStart-trimEnd
ES10: try catch y fromEntries
¿Qué se implementó en ES11?
ES11: optional chaining
ES11: BigInt y Nullish
ES11: Promise.allSettled
ES11: globalThis y matchAll
ES11: dynamic Import
¿Qué se implementó en ES12?
ES12: numeric-separators y replaceAll
ES12: promise-any y métodos privados
¿Qué se implementó en ES13?
ES13: at
ES13: top level await en el consumo de una API
Recapitulación
Performance
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Oscar Barajas Tavares
⚠️ En el código de la clase se escribe
selft
para acceder al ámbito global de un webworker, y debería serself
.
Las siguientes características de ES2020 que aprenderás son: el objeto global para cualquier plataforma y el método matchAll
para expresiones regulares.
El motor de JavaScript, aquel que compila tu archivo y lo convierte en código que entiende el computador, al iniciar la compilación crea un objeto global.
El objeto global proporciona funciones y variables propias e integradas en el lenguaje o el entorno. Dependiendo la plataforma, este objeto global tendrá un nombre diferente.
En el navegador el objeto global es window
, para Node.js es global
, y así para cada entorno. Sin embargo, en Node.js no podrás acceder a window
, ni en el navegador podrás acceder a global
.
Para estandarizar el objeto global se creó globalThis
, un objeto compatible para cualquier plataforma.
// Ejecuta el siguiente código y observa que muestra
console.log(window)
console.log(globalThis)
// En el navegador
window === globalThis // true
// En Node.js
global === globalThis // true
matchAll
para expresiones regularesEl método matchAll
de los strings devuelve un iterable con todas las coincidencias del string específico a partir de una expresión regular, colocada como argumento.
string.matchAll(regex)
En el iterable, existe una propiedad denominada index
con el índice del string donde la búsqueda coincide.
const regex = /\b(Apple)+\b/g
const fruit = "Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc."
// Tranformación del iterable retornado a array
const array = [...fruit.matchAll(regex)]
console.log(array)
/*
[
[
'Apple',
'Apple',
index: 0,
input: 'Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc.',
groups: undefined
],
[
'Apple',
'Apple',
index: 21,
input: 'Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc.',
groups: undefined
]
]
*/
Contribución creada por Andrés Guano (Platzi Contributor).
Aportes 31
Preguntas 3
Un aplauso para la estrella de este curso:
console.log 😂😂😂!..
Na es broma, pero lo he escrito tantas veces que anoche soñé con él
A un aporte tonto si se escribe solo la palabra log el editor te completa la sintaxis completa. 💪🏻💪🏻💪🏻
🤓 Pequeña corrección, es self
, no selft
. Puedes comprobarlo si colocas en la consola del navegador self
, te mostrará el objeto window
.
Hola Chic@s 😃
ES11:
console.log(window); // navegador
console.log(global); // node
console.log(selft);// webworker
console.log(globalThis);
const regex = /\b(Apple)+\b/g;
const fruit = "Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc.";
for (const match of fruit.matchAll(regex)) {
console.log(match);
}
Creo que no es completamente necesario usar una expresion regular, probé metiendo directamente un string dentro del matchAll() y también funcionó.
Se podria utilizar para validar que el comentario que deja un usuario no contenga ninguna palabra prohibida, en vez de filtrar por Apple, se filtraria por la(s) palabra(s) prohibida(s).
Para quien lo ocupe 😄
const regex = /\b(Apple)+\b/g;
Yo lo utilizaría si estoy haciendo un sign-up para verificar que la contraseña no sea el nombre de usuario ni el correo del usuario.
Comparto por aquí el código de la última parte
const regex = /\b(White)+\b/g;
const colors = 'Red, Green, Yellow, Black, White, Grey';
for (const match of colors.matchAll(regex)){
console.log(match);
}
Muy interesante el matchAll, miré que lo que retorna funciona como un Generator, se puede utilizar el método next() y todo, junto a su propiedad value, también con una propiedad done.
Siempre que vayamos a imprimir un array, les recomiendo que mejor usen console.table()
const regex = /\b(Apple)+\b/g;
const fruit = 'Apple, Banana, Tomato, Kiwi, Orange, etc, etc, etc';
for(const match of fruit.matchAll(regex)) {
console.table(match)
}
29/35 ES11: globalThis y matchAll
El objeto global para cualquier plataforma y el método matchAll para expresiones regulares.
El objeto global es un objeto que provee funciones y variables propias e integradas en el lenguaje o entorno, y su nombre varía dependiendo de la plataforma (window para el navegador, global para Node.js). Se creó globalThis para estandarizarlo, y se puede utilizar en cualquier plataforma.
Por otro lado, el método matchAll de los strings devuelve un iterable con todas las coincidencias del string específico a partir de una expresión regular. El iterable contiene una propiedad denominada index con el índice del string donde la búsqueda coincide.
const regex = /\b(Apple)+\b/g;
const fruit = "Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc.";
const array = [...fruit.matchAll(regex)];
console.log(array);
/*
[
[
'Apple',
'Apple',
index: 0,
input: 'Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc.',
groups: undefined
],
[
'Apple',
'Apple',
index: 21,
input: 'Apple, Banana, Kiwi, Apple, Orange, etc. etc. etc.',
groups: undefined
]
]
*/
Este código busca todas las palabras “Apple” en el string ‘fruit’, y retorna un iterable que contiene dos arrays, cada uno con información un iterable que contiene dos arrays, cada uno con información sobre una de las coincidencias encontradas (palabra, índice, input, etc.)
self es lo correcto entonces
Creo que esto podría ser de mucha utilidad en textos, contraseñas o simplemente cualquier cadena de caracteres.
Demasiado flojo el ejemplo o casi nulo el ejemplo de globalThis.
Existe un metodo similar llamado match, que regresa un array con todos los resultados del regex, pero sin darnos mucha informacion al respecto como matchAll, por ejemplo dado el siguiente codigo:
const fruits = `A want an apple, yeah it's what i want, apple apple`;
const regexi = fruits.match(regex);
console.log(regexi);
El resultado del console.log seria: [ ‘apple’, ‘apple’, ‘apple’ ].
Ahora bien me gustaria recalcar que la diferencia entre match y matchAll no es solo la informacion extra que da matchAll, tambien son distintos en el sentido de que match regresa un array comun y matchAll un iterador (el cual incluso soporta el metodo next(), como las funciones generadoras), de ahi que se necesita de un ciclo for of para obtener todos los resultados del MatchAll.
es11
, crear el archivo llamado: 04-global-this.js
//Compilar: seleccionar el código + click derecho + Run Code
//Ejercicio #1
console.log(window); // del lado del navegador
/*output: no tiene acceso a window
console.log(window);
^
ReferenceError: window is not defined
*/
console.log(global); // lado de node
//output: accede a datos de información
console.log(self); // del lado de webworker;
/*output: no tiene acceso a window
console.log(self);
^
ReferenceError: self is not defined
*/
console.log(globalThis);
//output: accede a datos de información
es11
, crear el archivo llamado: 05-matchall.js
//Compilar: seleccionar el código + click derecho + Run Code
//Ejercicio #1
const regex = /\b(Apple)+\b/g;
const fruit = 'Apple, Banana, Kiwi, Apple, Orange, etc., etc.';
for (const match of fruit.matchAll(regex)) {
console.log(match);
}
/*output:
[
'Apple',
'Apple',
index: 0,
input: 'Apple, Banana, Kiwi, Apple, Orange, etc., etc.',
groups: undefined
]
[
'Apple',
'Apple',
index: 21,
input: 'Apple, Banana, Kiwi, Apple, Orange, etc., etc.',
groups: undefined
]
*/
//Ejercicio #2
const regex2 = /\b(Etc)+\b/g;
const fruit2 = 'Apple, Banana, Kiwi, Apple, Orange, Etc, Etc, Etc';
for (const match2 of fruit2.matchAll(regex2)) {
console.log(match2);
}
/*output:
[
'Etc',
'Etc',
index: 36,
input: 'Apple, Banana, Kiwi, Apple, Orange, Etc, Etc, Etc',
groups: undefined
]
[
'Etc',
'Etc',
index: 41,
input: 'Apple, Banana, Kiwi, Apple, Orange, Etc, Etc, Etc',
groups: undefined
]
[
'Etc',
'Etc',
index: 46,
input: 'Apple, Banana, Kiwi, Apple, Orange, Etc, Etc, Etc',
groups: undefined
]
*/
Una aplicación en la industria para el matchAll() es cuando se require buscar información en archivos tipo texto que no tienen un formato tradicional parseable por javascript vanilla. Se podría incluso construir un parser custom.
También nos podría servir de alternativa al típico split (muchas veces usado más para ubicar ciertos substrings) o el mismo includes para verificar si unos determinados caracteres están en un string
Mi resumen:
👎🏼
uff si ya casi,
Filtrado de email determinados se me ocurre…
Lo utilizó mucho para validad si un tipo de código de una pieza es válido o no. Tanto buscar ese valor que me permite identificar la pieza por ejemplo Pieza A = código “2NZ” y la cantidad de caracteres que tiene el código completo.
Me acabo de inventar un ejemplo de lo que se podría hacer con la función matchAll()
/*Reto Platzi: Cortar todo el string hasta antes de la tercera repetición de "Apple".
Si no hay coincidencias regresar false*/
function retoPlatzi() {
const regex = /\b(Apple)+\b/g;
const fruit = "Apple, Banana, Kiwi, Apple, Orange, etc.Apple etc. etc.";
const array = [...fruit.matchAll(regex)];
const indices = [];
let indice;
if(array.length === 0) {
return false;
}
for(let match of array) {
indices.push(match["index"]);
}
indice = indices[indices.length - 1];
return fruit.slice(0, indice);
}
console.log(retoPlatzi());
globalThis
es una propiedad de objeto que representa el objeto global actual en JavaScript. Se introdujo en ECMAScript 2020 y proporciona una forma uniforme de acceder al objeto global en diferentes entornos, como navegadores, Node.js y otros.
Antes de la introducción de globalThis
, acceder al objeto global dependía de la implementación del entorno y podía ser diferente en diferentes navegadores o entornos de ejecución. Por ejemplo, en navegadores, el objeto global es window
, mientras que en Node.js es global
.
globalThis
permite una forma más uniforme de acceder al objeto global y es compatible con los estándares de ECMAScript. Aquí hay un ejemplo de cómo se puede usar globalThis
en JavaScript:
console.log(globalThis); // Output: (window or global, depending on the environment)
En este ejemplo, globalThis
devuelve el objeto global actual en el entorno en el que se ejecuta el código.
Respondiendo la pregunta del final, lo primero que se me ocurrio es que el matchAll seria util para crear filtros de palabras, como por ejemplos groserias y cosas por el estilo xd
utilizaría el matchAll() para validar que en una contraseña no se estén utilizando datos personales como fecha de nacimiento o numero de identidad.
**Me imagino para el uso de matchAll:
**
Imagina que estás trabajando una plantilla de respuestas de un chat de whatsapp por API, con matchAll podrás independiente de la ubicación y orden que te envie tu cliente, extraer los datos que quieras. Por ejemplo:
Hola soy Carlos y quiero pedir una pizza de carnes para la dirección XYZ.
const regex_pizza = /\b(pizza)+\b/g;
const regex_direccion = /\b(direccion)+\b/g;
const str = 'Hola soy Carlos y quiero pedir una pizza de carnes para la dirección XYZ.'
for (const match of str.matchAll(regex_pizza)){
console.log(match)
}
for (const match of str.matchAll(regex_direccion)){
console.log(match)
}
(No soy experto en RegEx seguro pueden quedar mejor, pero con el mapa de indice en el texto de las palabras clave pizza y dirección, luego de estas palabras puedes traer el detella de cada una, cosa que al final, tu progama entregue:
Pizza: de carnes
Dirección: XYZ
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?