2011-11-13 4 views
7

Je veux savoir, est-ce légal?Les points-virgules sont-ils obligatoires dans les instructions javascript?

function test() 
{ 
    alert ("hello") 
    $("#loading").show(); 
} 

Ou devrais-je écrire ceci:

function test() 
{ 
    alert ("hello"); 
    $("#loading").show(); 
} 

sont des points-virgules en option en JavaScript? Parce que j'ai vu cela dans un forum:

Non, sont généralement des points-virgules option en JavaScript (google pour l'insertion ASI virgule/automatique). Les utiliser rend le code beaucoup plus propre et ASI est un horrible défaut (du moins à mon avis).

+1

Voir: http://stackoverflow.com/questions/7219541/what-is-the-difference-between-semicolons-in-javascript-and-in-python/7219549#7219549 et d'autres réponses à la question – NullUserException

+1

Vos deux déclarations ont toutes les deux des points-virgules - aucune n'est différente. – Nightfirecat

+0

@Nightfirecat - Ils n'ont pas à l'origine, ressemble à l'édition de NullUserException remettre le point-virgule. Edit: mais ensuite retiré à nouveau! –

Répondre

12

Les points-virgules ne sont pas toujours obligatoires, mais je recommande toujours de les utiliser. Voir la ECMAScript spec pour les règles d'insertion des points-virgules automatique:

Certaines déclarations ECMAScript (instruction vide, LaVariable, déclaration d'expression , déclaration do-while, instruction continue, instruction break , déclaration de retour, et throw) doit être terminé avec des points-virgules. De tels points-virgules peuvent toujours apparaître explicitement dans le texte source . Par souci de commodité, cependant, ces points-virgules peuvent être omis à partir du texte source dans certaines situations. Ces situations sont décrites en disant que les points-virgules sont automatiquement insérés dans le flux de jeton de code source dans ces situations.

Mise à jour (pour expliquer plus en détail)

Peut-être la situation la plus courante utilisée pour montrer pourquoi l'insertion automatique de virgule peut être mauvais est que touché par @sissonb dans une autre réponse. Considérez ce qui suit:

function something(a, b) { 
    return 
    a + b; 
} 

Ce que vous attend peut-être doit être ignoré pour la nouvelle ligne, et le code interprété comme:

function something(a, b) { 
    return a + b; 
} 

Malheureusement, l'insertion de virgule automatique entre en jeu, et le code est en fait interprété comme ceci:

function something(a, b) { 
    return; 
    a + b; 
} 

Et une déclaration return vide signifie que la fonction retourne undefined. Donc, au lieu d'une belle somme des deux arguments, vous obtenez undefined et potentiellement finir très confus quant à l'endroit où vous avez mal tourné! C'est pourquoi je suis entièrement d'accord avec l'affirmation dans votre question que l'insertion automatique de points-virgules est une erreur horrible.

+0

Une exception sensible serait un rappel d'un seul interligne: 'ar.sort (fonction (a, b) {return f (a) - f (b)})' –

0

ne sont pas obligatoires points-virgules. Ils sont automatiquement ajoutés à la fin d'une ligne s'il manque, ce qui fait que ce code retourne undefined.

return 
{ 
    text:"hello" 
} 
+1

It renvoie en fait 'undefined', ce qui n'est pas tout à fait la même chose que' null' – NullUserException

+0

@NullUserException ఠ_ఠ Mise à jour de ma réponse. Merci – sissonb

Questions connexes