RegExp y tipos de datos
Dos temas para cerrar los fundamentos del lenguaje: cómo buscar patrones dentro de un texto con expresiones regulares —piensa en validar un email o un código postal—, y qué tipos de datos existen realmente en JavaScript, porque entenderlo bien te va a ahorrar más de un bug confuso.
Expresiones regulares: buscar patrones en texto
Una expresión regular (RegExp) describe un patrón de texto:
"¿esto se parece a un email?", "¿este código solo tiene letras y números?".
Se escriben entre barras: /patron/flags.
Devuelve true o false: ¿el texto encaja con el patrón?
Devuelve las coincidencias encontradas dentro del texto.
Sustituye lo que encaje con el patrón. Con la flag /g sustituye todas las apariciones, no solo la primera.
Ignora mayúsculas/minúsculas al comparar.
Busca todas las coincidencias, no se detiene en la primera.
Las expresiones regulares tienen fama merecida de ser difíciles de leer.
En el día a día, la mayoría de programadores busca o adapta un patrón ya
hecho (por ejemplo, para validar un email) en lugar de escribirlo desde
cero. Lo importante es entender qué hacen .test()
y .match(), no memorizar cada símbolo.
Los tipos de datos de JavaScript
Todo valor en JavaScript pertenece a uno de estos tipos. Se dividen en dos grandes grupos:
Texto: 'hola'.
Cualquier número, entero o decimal.
true o false.
Una variable declarada pero sin valor asignado todavía.
La ausencia intencionada de valor — alguien lo puso así a propósito.
Objetos, arrays, Sets, Maps, fechas... todo lo que no es un valor "simple" es técnicamente un objeto.
Los cinco primeros se llaman tipos primitivos: son inmutables y se comparan por valor. Los objetos son tipos "por referencia": se comparan por si son el mismo objeto en memoria, no por si "se ven igual".
Es, literalmente, un error de la primera versión de JavaScript de 1995 que
se quedó ahí para siempre por compatibilidad. No significa nada especial:
solo tenlo en cuenta si alguna vez necesitas comprobar si algo es null,
usa valor === null directamente, no
typeof.
Comprueba lo que has aprendido
1. ¿Qué hace patron.test(texto)?
2. ¿Por qué a === b es false si a = {x:1} y b = {x:1} (con el mismo contenido)?
3. ¿Cuál es la forma correcta de comprobar si un valor es null?