Buscar..


Reglas de inserción automática de punto y coma

Hay tres reglas básicas de inserción de punto y coma:

  1. Cuando, cuando el programa se analiza de izquierda a derecha, se encuentra un token (llamado token ofensivo ) que no está permitido por ninguna producción de la gramática, entonces se inserta automáticamente un punto y coma antes del token ofensivo si uno o más de los siguientes las condiciones son ciertas
  • El token ofensivo está separado del token anterior por al menos un LineTerminator .
  • El token ofensivo es } .
  1. Cuando, al analizar el programa de izquierda a derecha, se encuentra el final del flujo de entrada de tokens y el analizador no puede analizar el flujo de token de entrada como un único Program ECMAScript completo, luego se inserta automáticamente un punto y coma al final de el flujo de entrada.
  2. Cuando, cuando el programa se analiza de izquierda a derecha, se encuentra un token que es permitido por alguna producción de la gramática, pero la producción es una producción restringida y el token sería el primer token para un terminal o no terminal inmediatamente después de la anotación " [no LineTerminator here] " dentro de la producción restringida (y, por lo tanto, tal token se denomina token restringido), y el token restringido está separado del token anterior por al menos un LineTerminator , luego se inserta automáticamente un punto y coma antes del token restringido .

Sin embargo, hay una condición adicional adicional en las reglas anteriores: un punto y coma nunca se inserta automáticamente si el punto y coma se analizaría como una declaración vacía o si ese punto y coma se convertiría en uno de los dos puntos y coma en el encabezado de una declaración for (consulte 12.6.3).

Fuente: ECMA-262, Quinta edición ECMAScript Especificación:

Declaraciones afectadas por la inserción automática de punto y coma

  • declaración vacía
  • declaración var
  • declaración de expresión
  • declaración de do-while
  • continue declaración
  • declaración de break
  • declaración de return
  • throw declaración

Ejemplos:

Cuando se encuentra el final del flujo de entrada de tokens y el analizador no puede analizar el flujo de token de entrada como un único programa completo, se inserta automáticamente un punto y coma al final del flujo de entrada.

a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;

Indización de matrices / literales

console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();

Declaración de devolución:

return 
  "something";
// is transformed to
return;
  "something";

Evite la inserción de punto y coma en las declaraciones de devolución

La convención de codificación de JavaScript es colocar el corchete inicial de bloques en la misma línea de su declaración:

if (...) {

}

function (a, b, ...) {

}

En lugar de en la siguiente línea:

if (...)
{

}

function (a, b, ...) 
{

}

Esto se adoptó para evitar la inserción de punto y coma en las declaraciones de devolución que devuelven objetos:

function foo() 
{
    return // A semicolon will be inserted here, making the function return nothing
    {
        foo: 'foo'
    };
}

foo(); // undefined

function properFoo() {
    return {
        foo: 'foo'
    };
}

properFoo(); // { foo: 'foo' }

En la mayoría de los idiomas, la ubicación del corchete de inicio es solo una cuestión de preferencia personal, ya que no tiene un impacto real en la ejecución del código. En JavaScript, como ha visto, colocar el corchete inicial en la siguiente línea puede llevar a errores silenciosos.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow