Maison > interface Web > js tutoriel > le corps du texte

La différence entre ajouter des points-virgules et ne pas ajouter de points-virgules dans le code JS

青灯夜游
Libérer: 2020-11-24 17:54:44
avant
4212 Les gens l'ont consulté

La différence entre ajouter des points-virgules et ne pas ajouter de points-virgules dans le code JS

Cette question a été abordée dans de nombreux articles dans la spécification ESlint, elle est également divisée en deux camps selon qu'il faut ou non ajouter un point-virgule. ou pas, la clé est que vous devez comprendre l'impact des points-virgules sur JavaScript. Avant de commencer, vous pouvez jeter un œil à la question d'entretien suivante :

Ce code peut-il fonctionner normalement ?

var a = 1
(function() {
  console.log(2)
})()
Copier après la connexion

Si vous exécutez ce code, l'erreur suivante apparaîtra :

Uncaught TypeError: 1 is not a function
Copier après la connexion

C'est quoi ce bordel ! 1 is not a function ? Nous n'avions pas l'intention d'exécuter le chiffre 1. Pourquoi le chiffre 1 n'est-il pas une fonction ? Ce genre d'erreur est difficile à trouver et tourne souvent autour de la ligne de code problématique ? Cette erreur doit être due au fait que le code ci-dessus est considéré comme la même ligne au moment de l'exécution, et le concept est le suivant :

var a = 1(function() { /* */ })()
Copier après la connexion

Par conséquent, le () de la fonction immédiate est ajouté à 1, qui est un syntaxe pour appeler une fonction, Par conséquent, une erreur de 1 is not a function se produira. Pour éviter cette erreur, vous devez utiliser un point-virgule :

var a = 1 // 随便把分号放在哪里,只要能隔开就行
;(function() {
  console.log(2)
})()
Copier après la connexion

ASI ajoute automatiquement un point-virgule

ASI est le abréviation de "Automatic Semicolon Insertion", lors de l'exécution Parfois, un point-virgule sera automatiquement inséré dans certaines lignes brisées de code Ce mécanisme permet à certains codes de s'exécuter normalement sans ajouter de point-virgule, comme dans l'exemple suivant : <.>

var b = 1
++b
console.log('b', b)
Copier après la connexion

En raison du

dans le code est une expression unaire, qui ne peut placer des variables que sur le côté gauche de l'expression ++ ou sur le côté droit de Sans le mécanisme ASI, le. le code sera converti en instructions d'erreur comme . Mais heureusement, avec ASI, des points-virgules seront automatiquement ajoutés lors du fonctionnement réel, donc l'erreur ci-dessus ne se produira pas. La relation entre var b = 1 ++ b

var b = 1;
++b;
console.log('b', b); // 2
Copier après la connexion
return et point-virgule

Regardons un autre exemple dans le code suivant, écrivez la valeur à renvoyer après une ligne vide après

. de l'opération ? return

function fn() {
  return 
  '小明'
}
console.log(fn())
Copier après la connexion
En raison de la correction de l'ASI dans ce code de programme, un point-virgule sera ajouté après

, donc return est séparé de la valeur de retour attendue et le contenu de return est vide. valeur, le résultat final ne peut être que return. undefined

function fn() {
  return;
  '小明';
}
console.log(fn()); // undefined
Copier après la connexion
Comment gérer les points-virgules ?

À l'origine, ASI était par bonne intention et était utilisé pour corriger des extraits de code qui n'incluaient pas de points-virgules, mais il n'a pas joué son rôle à certains endroits . (Par exemple, la fonction immédiate introduite au début de cet article), entraînant des erreurs dans le code ; même certains codes ne provoqueront pas d'erreurs, mais les résultats d'exécution de votre code seront des milliers de kilomètres différents de ceux attendus.

La manière de résoudre le problème ASI est la suivante :

    Dans tous les cas, ajoutez des points-virgules. C'est à vous de décider de la répartition du code
  • .
  • N'oubliez pas que les points-virgules ne seront pas ajoutés automatiquement. Lorsque la règle du point-virgule ne sera pas automatiquement insérée, ajoutez manuellement

ne sera pas automatiquement ajoutée. > est la suivante :

n'ajoutera pas

automatiquement les règles de point-virgule :

Le code de la nouvelle ligne commence à partir des caractères
    ,
  1. , (. Ce genre de situation [ apparaît généralement directement, entraînant l'échec de l'exécution du code. /Uncaught TypeError
    var a = 1
    var b = a
    (a + b).toString()
    
    var a = 1
    [1,2,3].forEach(bar)
     
    (function() { })()
    (function() { })()
     
    var a = 1
    var b = a
    /test/.test(b)
    Copier après la connexion
Les nouvelles lignes commencent par
    ,
  1. , +, - La plupart de ces situations affecteront les résultats de l'opération, elles doivent donc être fusionnées en une seule. doubler. *
    var a = 2
    var b = a
    +a
    Copier après la connexion
Les nouvelles lignes commencent par
    ou
  1. Cette utilisation se produit souvent, principalement parce que la séparation est ajoutée pour éviter que le code ne soit trop long. Cette situation n'affecte pas l'exécution. et rend le code plus facile à lire s'il est utilisé à bon escient. ,.
    var a = 2
    var b = a
      .toString()
    console.log(typeof b)
     
    var a = 1
    ,b = 2 // b 同样会被 var 声明
    Copier après la connexion
  2. Si vous rencontrez une situation où vous devez ajouter un point-virgule, en plus d'ajouter un point-virgule à la fin de l'instruction, vous pouvez également ajouter le point-virgule devant "ne sera pas automatiquement ajoutez un point-virgule", par exemple
lui-même n'ajoutera pas automatiquement un point-virgule. Vous pouvez ajouter

au début lorsque cela est nécessaire (la spécification ESLint Standard JS utilise cette méthode pour éviter les erreurs). ()

// 运行错误
(function() { })()
(function() { })()
 
// 正确
;(function() { })()
;(function() { })()
Copier après la connexion
;Résumé

Certaines personnes pensent que ne pas ajouter de points-virgules peut rendre le code plus propre et plus rationalisé, et dans la plupart des cas, il n'y aura pas d'erreurs, donc beaucoup de gens tapent le code Pas de point-virgule est ajouté.

Cependant, je préfère des spécifications plus strictes, peut-être parce que je suis passé du back-end au front-end et que j'y suis habitué. Quant à savoir comment choisir, tant que vous comprenez les restrictions de fonctionnement, quel que soit le style qui vous convient, tant que vous l'aimez.

Pour plus de connaissances sur la programmation, veuillez visiter :

Introduction à la programmation

 ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal