objetos - ¿Se necesita punto y coma después de una asignación literal de objeto en JavaScript?
recorrer array de objetos javascript (7)
Use JSLint para mantener su JavaScript limpio y ordenado
JSLint dice:
Error:
Implícito global: alerta 2
Problema en la línea 3 carácter 2: falta el punto y coma.
}
El siguiente código ilustra un objeto literal que se está asignando, pero sin punto y coma después:
var literal = {
say: function(msg) { alert(msg); }
}
literal.say("hello world!");
Esto parece ser legal y no emite una advertencia (al menos en Firefox 3). ¿Es esto completamente legal, o hay una versión estricta de JavaScript donde esto no está permitido?
Me pregunto en particular por problemas de compatibilidad en el futuro ... Me gustaría escribir el JavaScript "correcto", así que si técnicamente necesito usar el punto y coma, me gustaría utilizarlo.
No técnicamente, JavaScript tiene puntos y comas como opcionales en muchas situaciones.
Pero, como regla general, utilícelos al final de cualquier declaración. ¿Por qué? Porque si alguna vez quiere comprimir el script, lo salvará de innumerables horas de frustración.
El intérprete realiza la inserción automática del punto y coma, por lo que puede omitirlos si así lo desea. En los comentarios, alguien afirmó que
Los puntos y coma no son opcionales con declaraciones como break / continue / throw
pero esto es incorrecto Ellos son opcionales; lo que realmente está sucediendo es que los terminadores de línea afectan la inserción automática de punto y coma; es una sutil diferencia.
Aquí está el resto del estándar sobre la inserción de punto y coma:
Por conveniencia, sin embargo, tales puntos y comas pueden omitirse del texto fuente en ciertas situaciones. Estas situaciones se describen diciendo que los puntos y comas se insertan automáticamente en la secuencia de token del código fuente en esas situaciones.
El compresor YUI y dojo shrinksafe deberían funcionar perfectamente bien sin punto y coma, ya que están basados en un analizador de JavaScript completo. Pero Packer y JSMin no lo harán.
La otra razón para usar siempre los puntos y coma al final de los enunciados es que ocasionalmente puede combinar accidentalmente dos declaraciones para crear algo muy diferente. Por ejemplo, si sigue la instrucción con la técnica común para crear un ámbito utilizando un cierre:
var literal = {
say: function(msg) { alert(msg); }
}
(function() {
// ....
})();
El analizador puede interpretar los corchetes como una llamada a función, lo que provoca un error de tipo, pero en otras circunstancias podría causar un error sutil que es difícil de rastrear. Otro error interesante es que si la siguiente instrucción comienza con una expresión regular, el analizador podría pensar que la primera barra inclinada es un símbolo de división.
El punto y coma no es necesario. Algunas personas optan por seguir la convención de terminar siempre con un punto y coma en lugar de permitir que JavaScript lo haga de forma automática en los saltos de línea, pero estoy seguro de que encontrará grupos que abogan por cualquier dirección.
Si está buscando escribir JavaScript "correcto", le sugiero que pruebe las cosas en Firefox con javascript.options.strict
(al que se accede a través de about:config
) establecido en verdadero. Es posible que no capte todo, pero debería ayudarlo a asegurarse de que su código JavaScript sea más compatible.
En este caso, no hay necesidad de un punto y coma al final de la instrucción. La conclusión es la misma, pero el razonamiento está muy lejos.
JavaScript no tiene punto y coma como "opcional". Por el contrario, tiene reglas estrictas sobre la inserción automática de punto y coma. Los puntos y coma no son opcionales con declaraciones como break
, continue
o throw
. Consulte la Especificación del lenguaje ECMA para más detalles; específicamente 11.9.1, reglas de inserción automática de punto y coma .
Esto no es válido (ver la aclaración a continuación) código de JavaScript, ya que la asignación es solo una declaración regular, no diferente de
var foo = "bar";
El punto y coma se puede omitir ya que los intérpretes de JavaScript intentan agregar un punto y coma para corregir los errores de sintaxis, pero este es un paso adicional e innecesario. No conozco ningún modo estricto, pero sí sé que los analizadores automáticos o los compresores / ofuscadores necesitan ese punto y coma.
Si quiere escribir el código JavaScript correcto, escriba el punto y coma :-)
De acuerdo con las especificaciones de ECMAscript, http://www.ecma-international.org/publications/standards/Ecma-262.htm , los puntos y comas se insertan automáticamente si faltan. Esto hace que no sean necesarios para el autor del guión, pero implica que son necesarios para el intérprete. Esto significa que la respuesta a la pregunta original es ''No'', no son necesarios al escribir un guión, pero, como lo señalan otros, se recomienda por varias razones.
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 los que no se arroja un error, pero las declaraciones no se ejecutan según lo previsto debido a la inserción de punto y coma. Considere una función que se supone 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 como este pueden ser enloquecedoramente difíciles de cazar y aunque no puedes asegurarte de que esto nunca ocurra (ya que no hay manera de que sepa desactivar la inserción de punto y coma), este tipo de errores son más fáciles de identificar cuando haces tus intenciones claras por consistentemente usando punto y coma. 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 el excelente y breve libro de Douglas Crockford " JavaScript: The Good Parts ". Lo recomiendo.