en ECMAScript, Javascript

Palabras reservadas a evitar como nombres de variables en Javascript

La primera buena práctica de Javascript que yo recomendaria es: evitar como nombres de variables las palabras reservadas de Javascript.

Las palabras reservadas son aquellas palabras que no debemos utilizar como nombres de variables (identificadores) ya que Javascript tiene asociado algún otro uso para ellas y seguramente nos lanzará un error al querer utilizarlas como nombres de variables.

Buscando una buena referencia de palabras clave a evitar me encontré con este post de Mathias Bynens que es inmejorable. En su articulo, Mathias lista y comenta las palabras clave reservadas de cada una de las versiones ECMAScript. Asi que, con permiso de su autor, este post es una traducción libre de su articulo…

palabras clave reservadas javascript

¿Andas buscando una lista de palabras reservadas en Javascript? ¡¡Has llegado al lugar correcto!! 🙂

Hace poco me surgió la necesidad de consultar esta lista, y como no encontré una fuente clara terminé haciendo yo una comparativa de las palabras clave reservadas para las diferentes versiones ECMAScript.
Asi que para futuras referencias, aquí tenéis el resultado de esta «investigación»

ECMAScript 1

La primera versión de Javascript se basó en ECMAScript 1 que incluía la siguiente lista de palabras reservadas.

// Reserved Words in ECMAScript1
break       for         new         var
continue    function    return      void
delete      if          this        while
else        in          typeof      with

// Future Reserved Words in ECMAScript1
case        debugger    export      super
catch       default     extends     switch
class       do          finally     throw
const       enum        import      try

ECMAScript 2

Años más tarde, ECMAScript 2 añadió int, byte, char, goto, long, final, float, short, double, native,public, static, throws, boolean, package, private, abstract, volatile, interface, protected,transient, implements, instanceof y synchronized.

// Reserved Words in ECMAScript2
break       for         new         var
continue    function    return      void
delete      if          this        while
else        in          typeof      with


// Future Reserved Words in ECMAScript2
abstract    do          import      short
boolean     double      instanceof  static
byte        enum        int         super
case        export      interface   switch
catch       extends     long        synchronized
char        final       native      throw
class       finally     package     throws
const       float       private     transient
debugger    goto        protected   try
default     implements  public      volatile

ECMAScript 3

ECMAScript 3 no introdujo ningún cambio en la lista de las palabras clave reservadas. Es idéntica a la lista de ECMAScript 2

ECMAScript 4

Lo mismo pasó con ECMAScript 4.

ECMAScript 5

ECMAScript 5/5.1 eliminó de la lista int, byte, char, goto, long, final, float, short, double, native,throws, boolean, abstract, volatile, transient y synchronized

Y añadió let y yield.

// Reserved Words in ECMAScript5
break       do          instanceof  typeof
case        else        new         var
catch       finally     return      void
continue    for         switch      while
debugger    function    this        with
default     if          throw
delete      in          try


// Future Reserved Words in ECMAScript5
class       enum        extends     super
const       export      import

// Future Reserved Words in ECMAScript5 within strict mode
implements  let         private     public      yield
interface   package     protected   static

// Words that aren't strictly Reserved Words but act like them 
// and should also be avoided
eval        arguments

// Words that aren't strictly Reserved Words 
// but should also be avoided as identifiers in ES5
NaN         Infinity    undefined

Fíjate que implements, let, private, public, interface, package, protected, static, y yield estan prohibidas sólo en strict mode

También he incluido en la lista  eval y arguments. No son estrictamente palabras reservadas pero se comportan como tal  y también están prohibidas en strict mode

Ademas, las propiedades NaN, Infinity, y undefined del objeto global son propiedades inmutables y de sólo lectura en ECMAScript 5. Asi que aunque hagamos var NaN = 42; en el contexto global no nos va a dar error pero tampoco va a hacer nada (no se va guardar ese valor en esa variable/propiedad). Por tanto, para evitar confusiones, es mejor evitar también el uso de estas palabras como identificadores de variables aunque no sean estrictamente palabras reservadas.

ECMAScript 6

El último borrador de ECMAScript 6 añade await como una futura palabra clave dentro de los modulos. let y yield estan prohibidas ahora incluso fuera del modo strict mode

// Reserved Words in ECMAScript6
break       do          in          typeof
case        else        instanceof  var
catch       export      new         void
class       extends     return      while
const       finally     super       with
continue    for         switch      yield
debugger    function    this    
default     if          throw   
delete      import      try

// Future Reserved Words in ECMAScript5
enum        await

// Future Reserved Words in ECMAScript6 within strict mode
implements  package     protected   
interface   private     public

¿Y cual es la utilidad práctica de todo esto?

Las palabras reservadas no deben ser utilizadas como nombres de variable en Javascript. Para un soporte optimo de versiones antiguas de Javascript (y evitar errores inesperados), lo mejor es acostumbrarse a evitar el uso de todas las palabras clave que aparecen en este articulo como nombres de variables o nombres de propiedades, incluso los más antiguos de ECMAScript 2 como char y default.


Cómo habreis observado en cada versión ECMAScript hay una lista de palabras claves reservadas y otra de «futuras» palabras claves reservadas.

Las «futuras» son palabras clave que si bien no están desarrolladas ni especificadas en la versión de ECMAScript que se trate, si que están propuestas oficialmente para ser desarrolladas por lo que se desaconseja su uso también para evitar problemas cuando ya esten implementadas

Post Anterior
Post Siguiente

Política de Comentarios de pixelovers

Responsable » Juan Manuel Garrido
Finalidad » Moderación de los comentarios
Legitimación » Tu consentimiento expreso que te será requerido por Disqus.
Destinatarios » Los datos de tus comentarios los guardará Disqus, mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy Shield tal y como recoge su politica de privacidad
Derechos » Desde Disqus, por tanto, podrás acceder, rectificar, limitar y suprimir tus comentarios o tu cuenta
Tienes más detalles acerca del tratamiento de los datos relacionados con los comentarios en nuestra (Política de Privacidad)