Los intérpretes de JavaScript hacen algo llamado "inserción de punto y coma", por lo que si una línea sin punto y coma es válida, se agregará un punto y coma al final de la instrucción y no se producirá ningún error.
var foo = 'bar'
// Valid, foo now contains 'bar'
var bas =
{ prop: 'yay!' }
// Valid, bas now contains object with property 'prop' containing 'yay!'
var zeb =
switch (zeb) {
...
// Invalid, because the lines following 'var zeb =' aren't an assignable value
No es demasiado complicado y al menos se produce un error cuando algo no está bien. Pero hay casos en que se produce un error no, pero las instrucciones no se ejecutan como se esperaba debido a la inserción de punto y coma. Considere una función que se supone que devuelve un objeto:
return {
prop: 'yay!'
}
// The object literal gets returned as expected and all is well
return
{
prop: 'nay!'
}
// Oops! return by itself is a perfectly valid statement, so a semicolon
// is inserted and undefined is unexpectedly returned, rather than the object
// literal. Note that no error occurred.
Errores de este tipo pueden ser exasperantemente difícil de cazar y al mismo tiempo no se puede garantizar esto nunca sucede (ya que no hay manera que conozco para convertir fuera de la inserción de punto y coma), este tipo de errores son más fáciles de identificar cuando haces que tus intenciones sean claras al usar consistentemente puntos y comas. Eso y agregar explícitamente punto y coma generalmente se considera un buen estilo.
Me enteré por primera vez de esta pequeña posibilidad insidiosa al leer Douglas Crockford's excelente y sucinto libro "JavaScript: The Good Parts". I altamente lo recomiendo.
Estoy bastante seguro de que se romperá en IE. Si bien puede ser javascript válido, probablemente tenga que agregar el punto y coma de todos modos –
Los puntos y comas son opcionales, pero su código no será válido si lo ejecuta a través de un minimizador de JavaScript como el compresor YUI. Por lo tanto, es una buena práctica incluir siempre puntos y comas. – Ricky