¿Por qué no se usan puntos y comas después de las sentencias if/else?


Entiendo que es una buena sintaxis usar punto y coma después de todas las sentencias en Javascript, pero ¿alguien sabe por qué las sentencias if/else no las requieren después de las llaves?

Author: Rob Bednark, 2013-06-11

3 answers

  • Punto y coma se usa para terminar UNA instrucción
  • { y } comienzan y cierran un grupo de declaraciones

Básicamente, un if-else debe ir seguido de una declaración o un grupo de declaraciones.

if-else seguida de una declaración:

if (condition) statement;
if (condition); // followed by a statement (an empty statement)

if-else seguida de un grupo de declaraciones:

if (condition) {
   statement;
   statement;
}

if (condition) {
   // followed by a group of statements of zero length
}

if-else debe terminar con un ; si va seguido de una sola instrucción. if-else no termina con un ; cuando es seguido por un grupo de declaraciones porque ; se usa para terminar una sola instrucción, y no se usa para terminar un grupo de instrucciones.

 42
Author: invisal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-28 19:07:50

La verdadera respuesta es porque muchos lenguajes modernos copiaron su sintaxis de C, que tiene esta propiedad. JavaScript es uno de estos lenguajes.

C permite bloques de sentencias

 { ... }

(que no necesita terminar con punto y coma) para ser utilizado cuando se pueden usar sentencias. Así que puedes usar bloques de sentencias como cláusulas then - y else -, sin los puntos y comas.

Si coloca una instrucción single en la cláusula then - or else -, deberá terminarla con un punto y coma. De nuevo, al igual que en C, con el giro adicional de JavaScript que ; es opcional al final de una línea, si insertarlo no causaría un error de sintaxis.

 10
Author: Ira Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-11 04:13:17

Porque las llaves mismas son caracteres de terminación.

Son tokens que encierran un bloque de sentencia compuesto y están terminadas intrínsecamente. Es como poner un punto al final de una oración, le indica al analizador que el pensamiento está completo.

Si bien es completamente feo, es válido envolver cada instrucción en {} y omitir ;

 5
Author: Orangepill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-11 03:55:13