En JavaScript existe un conjunto de palabras reservadas que forman parte de su sintaxis. Estas palabras tienen un significado especial: están destinadas a definir sus funcionalidades internas, por lo que no se pueden usar en la creación de nombres (identificadores) para variables, funciones y clases.
Una característica de las palabras reservadas es que siempre deben escribirse en minúsculas. Gracias a que JavaScript distingue entre mayúsculas y minúsculas, es posible usar versiones en mayúsculas y en diferentes combinaciones como nombres, ya que no se consideran la misma palabra reservada.
Por ejemplo, la palabra clave let se utiliza para declarar variables, por lo que forma parte de la sintaxis del lenguaje. Esto significa que no puede usarse como nombre. Así, el siguiente ejemplo es incorrecto:
let let = 2; // Error
En cambio, podríamos usar:
let LeT = 2; // Permitido
Aunque técnicamente se pueda, no es una buena práctica usar identificadores que solo difieran de palabras reservadas por el uso de mayúsculas. Esto puede generar confusión y disminuir la legibilidad del código.
En resumen: no se puede usar las palabras clave reservadas como identificador. Al hacerlo se obtiene errores en la salida del código. Tampoco se recomienda el uso de estas palabras usando mayúsculas para no generar confusión.
Lista de palabras clave reservadas:
| Palabra | Descripción |
|---|---|
await | Pausa la ejecución dentro de funciones async hasta que se resuelva una promesa. |
break | Sale inmediatamente de un bucle (for, while, switch). |
case | Define una condición dentro de una sentencia switch. |
catch | Captura y maneja errores en un bloque del tipo try. |
class | Declara una clase (plantilla de objetos). |
const | Declara una variable que no puede ser reasignada (constante). |
continue | Salta a la siguiente iteración de un bucle sin terminarlo. |
debugger | Pausa la ejecución del código en el depurador (si está activo). |
default | Bloque que se ejecuta en un switch si ningún case coincide. |
delete | Elimina una propiedad de un objeto. |
do | Ejecuta un bloque al menos una vez antes de comprobar la condición (do...while). |
else | Condición alternativa dentro de un if. |
enum | Reservada (no implementada en JS estándar, pero sí en TypeScript). |
export | Exporta funciones, variables o clases desde un módulo. |
extends | Permite que una clase herede de otra. |
false | Valor booleano del tipo falso. |
finally | Bloque que siempre se ejecuta tras try...catch. |
for | Inicia un bucle que se repite mientras se cumpla una condición. |
function | Declara una función. |
if | Evalúa una condición y ejecuta un bloque si se cumple. |
import | Importa funciones, variables o clases desde otro módulo. |
in | Comprueba si una propiedad existe en un objeto. |
instanceof | Verifica si un objeto es instancia de una clase. |
new | Crea una nueva instancia de un objeto o clase. |
null | Valor especial que representa “ausencia de valor”. |
return | Devuelve un valor desde una función. |
super | Llama al constructor o métodos de la clase padre. |
switch | Ejecuta distintos bloques según el valor evaluado. |
this | Referencia al objeto o contexto actual. |
throw | Lanza un error o excepción. |
true | Valor booleano del tipo verdadero. |
try | Bloque que contiene código que puede fallar. |
typeof | Devuelve el tipo de un valor (string, number, etc.). |
var | Declara una variable según la forma antigua (alcance de función). |
void | Evalúa una expresión y devuelve undefined. |
while | Ejecuta un bucle mientras la condición sea verdadera. |
with | Extiende temporalmente el alcance de un objeto (obsoleto). |
yield | Pausa o reanuda funciones generadoras, devolviendo valores paso a paso. |
Estas palabras están reservadas cuando se trabaja en modo estricto:
| Palabra | Descripción |
|---|---|
implements | Palabra reservada pensada para futuras características de interfaces o clases. No está implementada en JS estándar. |
interface | Similar a interfaces en otros lenguajes; reservada para posible uso futuro, aunque sí existe en TypeScript. |
let | Declara variables con alcance de bloque. |
package | Reservada para posibles usos relacionados con módulos o paquetes. No está implementada en JS estándar. |
private | Reservada para indicar miembros privados de clases. |
protected | Reservada para posibles miembros protegidos en clases. No implementado en JS estándar. |
public | Reservada para indicar miembros públicos de clases. En JS estándar no se usa, pero en TypeScript sí. |
static | Define un método o propiedad estática en una clase (pertenece a la clase, no a la instancia). |
Palabras reservadas para evitar conflictos futuros:
| Palabra | Descripción |
|---|---|
abstract | Apartada para un posible uso futuro en la definición de clases o estructuras. |
boolean | Reservada para representar en un futuro un valor lógico. |
byte | Prevista para un tipo de número entero pequeño. |
char | Destinada a identificar un carácter individual. |
double | Prevista para un tipo de número con mayor precisión. |
final | Podría usarse para limitar modificaciones en variables o clases. |
float | Prevista para un tipo de número en coma flotante. |
goto | Guardada para un posible mecanismo de control de flujo. |
int | Prevista para un tipo de número entero. |
long | Prevista para un número entero de mayor tamaño. |
native | Reservada para un uso relacionado con funciones internas o de bajo nivel. |
short | Prevista para un número entero más pequeño. |
synchronized | Podría emplearse en un futuro para coordinar ejecución o acceso a recursos. |
throws | Destinada a un sistema de manejo de errores. |
transient | Prevista para controlar la persistencia o el almacenamiento de datos. |
volatile | Guardada para un posible control especial del acceso a variables en ejecución. |