Validador de sintaxis JavaScript
Pega JavaScript para encontrar errores de sintaxis al instante, con la línea y la columna exactas, un fragmento del código y una pista en lenguaje sencillo. Elige la versión de ECMAScript y el modo script o módulo para comprobar el código según el entorno al que te diriges.
Última actualización:
Consejo: pulsa Ctrl + Intro para comprobar; Tab sangra dentro del editor (pulsa antes Esc para mover el foco). Tu código se analiza localmente y nunca se sube ni se ejecuta.
Cómo usar Validador de sintaxis JavaScript
- Pega tu JavaScript en el editor, abre un archivo .js / .mjs / .cjs o carga un ejemplo.
- Elige la versión de ECMAScript a la que te diriges (la más reciente por defecto) y el tipo de código: Módulo para código con import/export, Script para scripts clásicos o Detección automática.
- Pulsa Comprobar sintaxis (o Ctrl + Intro). Con Comprobar mientras escribo activado, el resultado se actualiza mientras editas.
- Lee el resultado: un mensaje verde con estadísticas del código, o el primer error de sintaxis con su línea, columna y una pista.
- Salta al error con Mostrar en el código, corrígelo y repite hasta que el código sea válido. Copia el informe si necesitas compartirlo.
Qué sintaxis necesita cada versión de ECMAScript
Ajusta la versión de ECMAScript al entorno más antiguo que admitas; el validador rechazará entonces la sintaxis que ese entorno no puede analizar. Hitos habituales:
| Versión | Sintaxis que añadió (ejemplos) |
|---|---|
| ES5 (2009) | Directiva de modo estricto, getters y setters en literales de objeto, comas finales en literales de objeto |
| ES2015 (ES6) | let/const, funciones flecha, clases, plantillas literales, desestructuración, parámetros por defecto y rest, spread, for…of, generadores, import/export |
| ES2016 | Operador de exponente ** |
| ES2017 | async/await, comas finales en los parámetros de funciones |
| ES2018 | Rest/spread de objetos {...obj}, for await…of, grupos con nombre y lookbehind en expresiones regulares |
| ES2019 | Enlace opcional en catch catch {} |
| ES2020 | Encadenamiento opcional ?., fusión de nulos ??, literales BigInt 10n, import() dinámico |
| ES2021 | Asignación lógica ??= ||= &&=, separadores numéricos 1_000 |
| ES2022 | Campos de clase, #campos y métodos privados, bloques estáticos, await de nivel superior en módulos |
| ES2023 | Comentarios hashbang #! |
| ES2024 | Indicador v de expresiones regulares (notación de conjuntos) |
| ES2025 | Atributos de importación with { type: "json" }, modificadores de expresiones regulares, grupos de captura con nombre duplicados |
Errores de sintaxis comunes de JavaScript y cómo corregirlos
| Mensaje | Causa habitual |
|---|---|
| Unexpected token | Falta un ), ], } o una coma justo antes de la posición indicada, o sobra uno en ella. |
| Unterminated string constant | Unas comillas no están cerradas, o una cadena normal ocupa varias líneas. |
| Unexpected character '“' | Comillas tipográficas pegadas desde un procesador de textos o una app de chat. |
| 'import' and 'export' may appear only with 'sourceType: module' | Código de módulo comprobado como script clásico. |
| Cannot use keyword 'await' outside an async function | La función que lo contiene no es async. |
| Identifier 'x' has already been declared | El mismo nombre de let/const/class declarado dos veces en un mismo ámbito. |
| Invalid regular expression flag | Un error tipográfico en los indicadores de la expresión regular, o un indicador que tu versión de ES seleccionada no admite. |
Cuando el código sea válido, ordénalo con el embellecedor de JavaScript o redúcelo con el minificador de JavaScript.
Preguntas frecuentes
¿Mi código se ejecuta o se sube?
Ninguna de las dos cosas. El código solo lo analiza el analizador de JavaScript Acorn dentro de tu navegador. Nunca se ejecuta, así que no puede tener efectos secundarios, y no se envía nada a ningún servidor.
¿Por qué muestra solo un error a la vez?
Un analizador de JavaScript no puede continuar de forma fiable después de un error de sintaxis, porque todo lo que sigue puede interpretarse de otra manera. Como los navegadores y Node.js, el validador informa del primer error; corrígelo y aparecerá el siguiente, si lo hay.
¿Cuál es la diferencia entre Módulo y Script?
Los módulos permiten import y export, siempre están en modo estricto y permiten await de nivel superior (ES2022+). Los scripts clásicos son los que usan una etiqueta <script> normal o los archivos antiguos de Node.js: import/export son errores de sintaxis y se permite cierta sintaxis del modo no estricto, como las sentencias with o los literales octales. La detección automática prueba primero como módulo y, si falla, como script.
¿Encuentra errores en tiempo de ejecución o variables no definidas?
No. Solo comprueba la gramática. Llamar a una función que no existe, usar una variable no definida o un error de tipos son problemas de ejecución o de lint, no errores de sintaxis. Para eso usa un linter como ESLint.
¿Puede comprobar JSX o TypeScript?
No, porque ninguno de los dos es JavaScript estándar. JSX y las anotaciones de tipo de TypeScript producen errores de sintaxis, y la herramienta te avisa cuando el código parece uno de ellos. Para formatear TypeScript y TSX usa el Formateador de TypeScript.
¿Qué significa Versión mínima de ES?
Es la edición más antigua de ECMAScript cuya gramática acepta tu código. Por ejemplo, el encadenamiento opcional (?.) requiere ES2020 y los campos privados de clase (#x) requieren ES2022. Solo refleja la sintaxis; no se tienen en cuenta métodos integrados como Array.prototype.at.
¿Qué numeración de líneas y columnas se usa?
Tanto las líneas como las columnas empiezan en 1, como en la mayoría de los editores. La columna cuenta caracteres, así que un tabulador cuenta como una columna.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.