P
prepair.app
Comenzar entrevista →
EnglishУкраїнськаРусскийDeutsch
🟨

Preguntas de entrevista JavaScript

Las entrevistas de JavaScript se concentran en un pequeño número de cosas que el lenguaje hace distinto a todo lo demás: closures, `this`, prototipos y el event loop. Entiende eso bien y la mayoría de las otras preguntas se resuelven solas. Aquí están las más frecuentes, cada una con una respuesta modelo.

Junior · sin experiencia / menos de 1 añoMiddle · 2–4 años de experienciaSenior · 5+ años de experiencia

Qué preguntan

Tipos y coerción
Closures y scope
`this` y prototipos
El event loop y async
Promises y async/await
DOM, eventos y el navegador

10 preguntas reales con respuestas

Cada pregunta viene con una respuesta modelo con la que puedes comparar la tuya.

1

¿Qué tipos de datos hay en JavaScript?

Respuesta

Siete primitivos — string, number, boolean, null, undefined, symbol, bigint — y todo lo demás es un objeto, incluyendo arrays y funciones. Los primitivos se copian por valor y los objetos por referencia, que es el origen de la mayor parte de la confusión sobre por qué cambiar una variable cambió otra. typeof null devuelve 'object', y ese es un bug de 1995 que nunca se puede arreglar sin romper la web.

2

¿Cuál es la diferencia entre `var`, `let` y `const`?

Respuesta

var tiene scope de función y se hoistea como undefined; let y const tienen scope de bloque y quedan en la zona muerta temporal hasta la declaración, así que tocarlas antes lanza un error en lugar de dar undefined silenciosamente. const evita reasignar la variable, no mutar el objeto al que apunta — const arr = [] sigue permitiendo arr.push(). Usa const por defecto, let cuando debas reasignar, y nunca var.

3

¿Cuál es la diferencia entre `==` y `===`?

Respuesta

=== compara tipo y valor; == coacciona primero, siguiendo reglas que hacen que null == undefined sea verdadero mientras null == 0 es falso. Como casi nadie recuerda toda la tabla, la regla práctica es usar siempre ===. La única excepción defendible es x == null como forma corta de comprobar tanto null como undefined.

4

¿Qué es un closure?

Respuesta

Una función junto con el scope en el que fue creada, al que mantiene acceso incluso después de que la función externa haya retornado. Es lo que hace posible el estado privado, las funciones factory y los hooks — la función interna guarda una referencia viva, no una copia. La trampa clásica de entrevista es un var en un loop con setTimeout, donde todos los callbacks comparten un binding e imprimen el mismo valor; let le da a cada iteración el suyo propio.

5

¿Qué es `this` y cómo se determina?

Respuesta

Por cómo se llama la función, no por dónde se define. Llamada como método, this es el objeto antes del punto; llamada de forma plana, es undefined en modo estricto; llamada con new, es el nuevo objeto; y call, apply y bind lo fijan explícitamente. Las arrow functions no tienen this propio y lo toman del scope que las contiene, que es exactamente por qué resolvieron el problema de los callbacks y exactamente por qué están mal como métodos de objeto.

6

¿Cómo funciona la herencia prototípica?

Respuesta

Cada objeto tiene un enlace oculto a otro objeto, su prototipo. Cuando lees una propiedad que no está ahí, el motor recorre esa cadena hasta encontrarla o llegar a null. class es sintaxis sobre esto — crea una función constructora cuyo objeto prototype guarda los métodos, así que todas las instancias comparten una copia de cada método en lugar de que cada una lleve la suya.

7

Explica el event loop, macrotasks y microtasks.

Respuesta

JavaScript corre en un solo hilo con una cola. Cuando el call stack se vacía, el loop vacía toda la cola de microtasks — callbacks de promises, queueMicrotask, MutationObserver — y solo entonces toma una macrotask, como un callback de setTimeout o un evento. Por eso un .then siempre corre antes que un setTimeout(0) programado antes, y por eso una cadena interminable de microtasks puede bloquear el renderizado por completo.

8

¿Cuál es la diferencia entre `Promise.all` y `Promise.allSettled`?

Respuesta

all rechaza tan pronto como cualquier promise rechaza y no te da nada del resto; allSettled siempre resuelve con un status por promise. Usa all cuando toda la operación no tiene sentido si una parte falla, allSettled cuando quieres reportar qué partes fallaron. Y nota la diferencia con awaits secuenciales en un loop — esos corren uno tras otro, lo cual suele ser un bug de rendimiento accidental.

9

¿Cuál es la diferencia entre una copia superficial y una profunda?

Respuesta

Una copia superficial — spread u Object.assign — copia el nivel superior, así que los objetos anidados siguen compartidos y mutarlos afecta al original. Una copia profunda duplica todo el árbol; structuredClone lo hace nativamente y maneja ciclos, Map y Date, mientras que el viejo truco JSON.parse(JSON.stringify(x)) descarta silenciosamente funciones, undefined y tipos Date.

10

¿Cuál es la diferencia entre una arrow function y una normal?

Respuesta

Una arrow function no tiene this, no tiene arguments, no tiene prototype, y no se puede llamar con new. Toma this léxicamente de donde fue definida, que es lo que la hace correcta para callbacks e incorrecta para métodos de objeto y métodos de prototipo. Tampoco se puede usar como constructor o generador.

🦎

Leer respuestas no es suficiente

En una entrevista real hablas bajo presión. Cam hace estas mismas preguntas, evalúa cada respuesta y muestra exactamente qué mejorar.

Practicar entrevista de JavaScript →
Gratis · 3 entrevistas al mes

Vale la pena leer

Todos los artículos →

Otras especializaciones

🔍Manual QA🤖QA AutomationJava Backend🐍Python Backend🐘PHP Backend🦫Go Backend🟢Node.js Backend💎Ruby on Rails🔷C++⚛️React Frontend💚Vue Frontend🅰️Angular FrontendNext.js🍏iOS (Swift)🟩Android (Kotlin)⚙️DevOps / SRE🗄️Data Engineer📈Business Analyst🎯Product Manager📋Project Manager🎨UI/UX Designer📣Marketing