B3-T9: JavaScript, Frameworks Frontend y Lenguajes Backend

JavaScript es el lenguaje web más preguntado del examen. El foco está en: tipos y coerción (=== vs ==), manipulación del DOM, promesas/async y propagación de eventos. La segunda mitad del tema cubre PHP (sintaxis, Laravel) y Python (datos básicos).

JAVASCRIPT

Fuente: ECMA-262 (ECMAScript Language Specification) — ecma-international.org. MDN Web Docs (developer.mozilla.org) — CC BY-SA.

FUNDAMENTOS

CaracterísticaValor
CreadorBrendan Eich, Netscape (1995). 10 días de desarrollo
EstándarECMAScript (ECMA-262). Ediciones: ES5 (2009), ES6/ES2015, ES2016-ES2024
TipadoDinámico y débilmente tipado
ParadigmaMulti-paradigma: imperativo, funcional, orientado a objetos (prototipos)
EjecuciónInterpretado con JIT compilation. Single-threaded con event loop
EntornosNavegador (cliente) + Node.js (servidor, 2009)

VARIABLES Y TIPOS

DeclaraciónScopeReasignableHoisting
varFunciónSí (se eleva como undefined)
letBloqueNo (TDZ — Temporal Dead Zone)
constBloqueNoNo (TDZ)
Tipo primitivotypeofEjemplo
number"number"42, 3.14, NaN, Infinity
string"string""hola", 'mundo', `template ${var}`
boolean"boolean"true, false
undefined"undefined"Variable declarada sin valor
null"object" (bug histórico)Ausencia intencionada de valor
symbol"symbol"Symbol("id") — ES6, identificadores únicos
bigint"bigint"9007199254740993n — ES2020
Pregunta clásica: typeof null === "object" es un bug del lenguaje desde 1995, nunca corregido por compatibilidad. typeof NaN === "number" también es contraintuitivo.

OPERADORES CLAVE PARA EL EXAMEN

OperadorNombreEjemploResultado
==Igualdad abstracta (con coerción)"5" == 5true
===Igualdad estricta (sin coerción)"5" === 5false
!=Desigualdad abstracta"5" != 5false
!==Desigualdad estricta"5" !== 5true
??Nullish coalescing (ES2020)null ?? "default""default"
?.Optional chaining (ES2020)obj?.prop?.subundefined si alguno es null/undefined
...Spread / Rest[...arr] / function(...args)Expande o recoge elementos
Regla de oro: SIEMPRE usar ===. La coerción de == produce resultados impredecibles: "" == false → true, 0 == "" → true, null == undefined → true.

FUNCIONES ESPECIALES

FunciónQué haceDato examen
eval(string)Ejecuta código JavaScript desde un stringNUNCA usar: vulnerabilidad de inyección, rendimiento pobre
parseInt(str, radix)Parsea string a entero con baseparseInt("08", 10) → 8. Siempre pasar radix
parseFloat(str)Parsea string a decimalSe para al primer carácter no numérico
isNaN() / Number.isNaN()Comprueba si es NaNisNaN("abc") → true (coerción). Number.isNaN("abc") → false (estricto)
btoa(str)String → Base64Binary to ASCII
atob(str)Base64 → StringASCII to Binary
JSON.stringify(obj)Objeto → JSON stringSerialización
JSON.parse(str)JSON string → ObjetoDeserialización

ARRAYS — MÉTODOS CLAVE

MétodoMutaRetornaFunción
push() / pop()Longitud / ElementoAñadir/quitar al final
unshift() / shift()Longitud / ElementoAñadir/quitar al principio
splice(i, n, ...items)Elementos eliminadosInsertar/eliminar en posición
slice(start, end)NoNuevo arraySubarray (copia superficial)
map(fn)NoNuevo arrayTransforma cada elemento
filter(fn)NoNuevo arrayFiltra por condición
reduce(fn, init)NoValor acumuladoReduce a un solo valor
find(fn)NoElemento o undefinedPrimer elemento que cumple
forEach(fn)NoundefinedItera (sin retorno)
includes(val)NoBoolean¿Contiene el valor?
sort(fn)Array ordenadoOrdena (default: lexicográfico)

CLOSURES Y ARROW FUNCTIONS

ConceptoDescripción
ClosureFunción que "recuerda" el scope donde fue creada, incluso después de que ese scope haya terminado
Arrow function(params) => expresión. No tiene su propio this (hereda del scope padre)
this en función normalDepende de cómo se llama (dynamic binding)
this en arrowSe fija al scope léxico (lexical binding)

PROMESAS Y ASYNC/AWAIT

ConceptoDescripción
PromiseObjeto que representa un valor futuro. Estados: pendingfulfilled o rejected
.then(onFulfilled)Se ejecuta cuando la promesa se resuelve
.catch(onRejected)Se ejecuta cuando la promesa falla
.finally(fn)Se ejecuta siempre (limpieza)
Promise.all([])Espera a TODAS. Falla si cualquiera falla
Promise.allSettled([])Espera a TODAS. Retorna resultado de cada una (fulfilled o rejected)
Promise.race([])Retorna la primera que se resuelva (o rechace)
async functionFunción que siempre retorna una Promise
awaitPausa la ejecución hasta que la Promise se resuelva. Solo dentro de async

AJAX Y FETCH API

TecnologíaAPIModelo
XMLHttpRequest (XHR)Legacy. new XMLHttpRequest()Callbacks (onreadystatechange)
Fetch APIModerno. fetch(url, options)Promises. Retorna Response object
Tip examen: Fetch no rechaza la promesa por errores HTTP (404, 500). Hay que comprobar response.ok. Solo rechaza por errores de red.

EVENT LOOP Y MODELO DE CONCURRENCIA

ComponenteFunción
Call StackPila de ejecución (LIFO). Una sola — single-threaded
Web APIssetTimeout, fetch, DOM events — ejecutados por el navegador fuera del stack
Callback Queue (Task Queue)Cola de callbacks listos (macrotasks: setTimeout, I/O)
Microtask QueuePrioridad mayor: Promises (.then), MutationObserver, queueMicrotask
Event LoopMueve callbacks de las colas al call stack cuando este está vacío
Orden de ejecución: Call Stack → Microtasks (todas) → 1 Macrotask → Microtasks → 1 Macrotask... Las Promises se resuelven ANTES que setTimeout(0).

PROPAGACIÓN DE EVENTOS DOM

FaseDirecciónDescripción
1. CapturingRaíz → TargetEl evento desciende por el árbol DOM
2. TargetEl evento llega al elemento que lo originó
3. BubblingTarget → RaízEl evento asciende por el árbol DOM
MétodoFunción
event.stopPropagation()Detiene la propagación (no llega a ancestros)
event.preventDefault()Evita la acción por defecto (ej: no enviar formulario, no seguir enlace)
addEventListener(type, fn, true)El tercer parámetro true = escuchar en fase capturing (default: bubbling)

FRAMEWORKS Y HERRAMIENTAS FRONTEND

FrameworkCreadorLenguajeCaracterísticas clave
ReactMeta (Facebook)JSX (JS + HTML)Virtual DOM, componentes, hooks, unidireccional. Librería (no framework completo)
AngularGoogleTypeScriptFramework completo: router, forms, HTTP, DI. Two-way binding
Vue.jsEvan YouSFC (.vue)Reactivity system, composition API, progressive framework
SvelteRich HarrisSvelte syntaxCompilador (no runtime Virtual DOM). Resultado = vanilla JS
Next.jsVercelReact + TypeScriptSSR, SSG, ISR, API routes, App Router
HerramientaFunción
npmGestor de paquetes de Node.js. package.json
WebpackBundler: agrupa módulos JS, CSS, imágenes en bundles
ViteBundler moderno: dev server ultra rápido (ESM nativo), build con Rollup
BabelTranspilador: ES6+ → ES5 para navegadores antiguos
TypeScriptSuperset tipado de JS. Compila a JS. Creado por Microsoft
ESLintLinter: análisis estático de código JS/TS
PrettierFormateador automático de código

TYPESCRIPT

ConceptoDescripción
Qué esSuperset de JavaScript con tipos estáticos. Todo JS válido es TS válido
Compiladortsc (TypeScript Compiler): .ts → .js
Tipos básicosstring, number, boolean, any, void, never, unknown
Interfacesinterface User { name: string; age: number; }
Genericsfunction identity<T>(arg: T): T
Enumsenum Color { Red, Green, Blue }
Union typesstring | number

LENGUAJES BACKEND Y STACKS

STACKS DE DESARROLLO WEB

StackComponentesLenguaje
LAMPLinux + Apache + MySQL + PHPPHP
LEMPLinux + Engine-X (NGINX) + MySQL/MariaDB + PHPPHP
MEANMongoDB + Express.js + Angular + Node.jsJavaScript (full-stack)
MERNMongoDB + Express.js + React + Node.jsJavaScript
MEVNMongoDB + Express.js + Vue.js + Node.jsJavaScript
JAMstackJavaScript + APIs + Markup (estático, CDN)JavaScript

PHP

Fuente: PHP Manual (php.net/manual) — documentación oficial, licencia PHP. Creado por Rasmus Lerdorf (1995).
ConceptoPHP
TipadoDinámico, débilmente tipado (type juggling). Desde PHP 7: type hints opcionales
VariablesPrefijo $: $nombre = "valor";
Strings"interpolación $var" (comillas dobles) vs 'literal' (comillas simples)
ArraysIndexados y asociativos: $arr = ["clave" => "valor"];
Comparación== (con coerción), === (estricta, tipo + valor)
Spaceship<=> (PHP 7): retorna -1, 0, 1 para ordenación
Null coalescing$x = $y ?? "default"; (PHP 7)
ConcatenaciónCon punto: "Hola " . $nombre
Superglobales$_GET, $_POST, $_SESSION, $_COOKIE, $_SERVER, $_FILES, $_REQUEST
OOP en PHPSintaxis
Claseclass Persona { public $nombre; }
Herenciaclass Alumno extends Persona { }
Interfazinterface Serializable { public function serializar(); }
Traittrait Loggable { } + use Loggable; (herencia horizontal)
Namespacenamespace App\Models;
AutoloadComposer con PSR-4: composer.json, vendor/autoload.php

LARAVEL

ComponenteFunción
Eloquent ORMActive Record pattern. Modelos = tablas. User::where('age', '>', 18)->get()
BladeMotor de plantillas: {{ $var }}, @if, @foreach, @extends
ArtisanCLI: php artisan make:model, php artisan migrate
MigrationsVersionado del esquema de BD en código PHP
MiddlewareInterceptores de peticiones HTTP (auth, CORS, logging)
RoutesRoute::get('/users', [UserController::class, 'index'])
ComposerGestor de paquetes PHP (composer.json). Equivalente a npm/Maven
Producto PHPTipo
WordPressCMS (~43% de la web). PHP + MySQL
DrupalCMS (gubernamental, corporativo)
MoodleLMS (e-learning)
MagentoE-commerce
MediaWikiWiki (Wikipedia)

PYTHON

Fuente: Python Documentation (docs.python.org) — PSF License. Creado por Guido van Rossum (1991).
ConceptoPython
TipadoDinámico, fuertemente tipado (no hay coerción implícita)
SintaxisIndentación obligatoria (sin llaves). Legibilidad como principio
ParadigmaMulti-paradigma: OOP, funcional, imperativo
IntérpreteCPython (referencia), PyPy (JIT), Jython (JVM), IronPython (.NET)
Gestor paquetespip + PyPI (pypi.org). Entornos virtuales: venv, virtualenv
Versión actualPython 3.x (Python 2 EOL en 2020)
Framework PythonTipoCaracterísticas
DjangoFull-stackORM integrado, admin automático, "batteries included". Patrón MTV
FlaskMicroframeworkLigero, extensible, sin ORM/forms incluido
FastAPIAPI frameworkAsync, auto-docs OpenAPI, type hints, rendimiento alto

NODE.JS

ConceptoDescripción
Qué esRuntime de JavaScript en el servidor. Motor V8 (Chrome). Creado por Ryan Dahl (2009)
ModeloEvent-driven, non-blocking I/O, single-threaded (event loop)
Gestor paquetesnpm (default), yarn, pnpm. Registro: npmjs.com
MódulosCommonJS (require()) y ESM (import/export)
Framework principalExpress.js — minimalista, middleware-based
AlternativasDeno (seguro por defecto, TypeScript nativo), Bun (ultra rápido, JSC engine)


FUENTES PÚBLICAS

Este resumen ha sido elaborado íntegramente a partir de fuentes de dominio público. No se ha utilizado material con copyright de terceros ni material de preparadores.
FuenteTipoReferencia
ECMA-262 — ECMAScript SpecificationEstándarecma-international.org
MDN Web DocsDocumentación comunitariadeveloper.mozilla.org (CC BY-SA)
PHP ManualDocumentación oficialphp.net/manual (licencia PHP)
Python DocumentationDocumentación oficialdocs.python.org (PSF License)
Node.js DocumentationDocumentación oficialnodejs.org/docs (MIT)
TypeScript DocumentationDocumentación oficialtypescriptlang.org (Apache 2.0)

¿Quieres practicar este tema con tests?

MIMIR tiene más de 5.000 preguntas verificadas, simulacros con penalización real y chat IA que resuelve tus dudas sobre este tema.

Abrir MIMIR gratis →