Const en javascript? Quand l'utiliser et est-il nécessaire?

J'ai récemment rencontré le mot-clé const dans javascript. D'après ce que je peux dire, il est utilisé pour créer des variables immuables et j'ai testé pour s'assurer qu'il ne peut pas être redéfini (dans node.js):

const x = 'const'; const x = 'not-const'; // Will give an error: 'constant 'x' has already been defined' 

Je me rends compte qu'il n'est pas encore standardisé dans tous les navigateurs – mais je ne suis intéressé que dans le contexte de node.js / v8 et j'ai remarqué que certains développeurs / projets semblent le favoriser fortement lorsque le mot clé var pourrait être utilisé Au même effet.

Questions ?

Quand est-il approprié d'utiliser const à la place de var ?

Devrait-il être utilisé chaque fois qu'une variable qui ne va pas être réattribuée est déclarée?

Est-ce que cela fait vraiment une différence si var est utilisé à la place de const ou vice versa?

    Il y a deux aspects de vos questions: quels sont les aspects techniques de l'utilisation de const au lieu de var et quels sont les aspects liés à l'homme de le faire.

    La différence technique est significative. Dans les langages compilés, une constante sera remplacée au moment de la compilation et son utilisation permettra d'autres optimisations comme le retrait du code mort afin d'augmenter encore l'efficacité de l'exécution du code. Terme (utilisé récemment) Les moteurs JavaScript compilent réellement le code JS pour obtenir de meilleures performances, de sorte que l'utilisation du mot-clé const les informe que les optimisations décrites ci-dessus sont possibles et devraient être effectuées. Il en résulte une meilleure performance.

    L'aspect humain concerne la sémantique du mot-clé. Une variable est une structure de données qui contient des informations qui devraient changer. Une constante est une structure de données qui contient des informations qui ne changeront jamais. S'il y a lieu d'erreur, var doit toujours être utilisé. Toutefois, toutes les informations qui ne changent jamais dans la durée de vie d'un programme doivent être déclarées avec const . Si, dans des circonstances différentes, les informations doivent changer, utilisez var pour indiquer que même si la modification réelle n'apparaît pas dans votre code.

    Malgré un support de navigateur assez correct , j'éviterais de l'utiliser pour l'instant. De l'article de MDN sur const :

    L'implémentation actuelle de const est une extension spécifique à Mozilla et ne fait pas partie d'ECMAScript 5. Elle est prise en charge par Firefox et Chrome (V8). Depuis Safari 5.1.7 et Opera 12.00, si vous définissez une variable avec const dans ces navigateurs, vous pouvez encore modifier sa valeur plus tard. Il n'est pas pris en charge dans Internet Explorer 6-10, mais est inclus dans Internet Explorer 11. Le mot-clé const déclare actuellement la constante dans la portée de la fonction (comme les variables déclarées avec var).

    Ensuite, il dit:

    const sera défini par ECMAScript 6, mais avec une sémantique différente. Comme pour les variables déclarées avec l'instruction let, les constantes déclarées avec const seront classées par blocs.

    Si vous utilisez const vous devrez ajouter une solution de contournement pour supporter des navigateurs légèrement plus anciens.

    Pour intégrer les réponses précédentes, il existe un avantage évident à déclarer des variables immuables, en dehors de la raison de performance: si vous essayez accidentellement de les modifier ou de les déclarer à nouveau dans le code, le programme ne changera pas la valeur ou ne lancera aucune erreur.

    Par exemple, comparez:

     // Will output 'SECRET' const x = 'SECRET' if (x = 'ANOTHER_SECRET') { // Warning! assigning a value variable in an if condition console.log (x) } 

    avec:

     // Will output 'ANOTHER_SECRET' var y = 'SECRET' if (y = 'ANOTHER_SECRET') { console.log (y) } 

    ou

     // Will throw TypeError: const 'x' has already been declared const x = "SECRET" /* complex code */ var x = 0 

    avec

     // Will reassign y and cause trouble var y = "SECRET" /* complex code */ var y = 0 

    const n'est pas immuable.

    Du MDN :

    La déclaration const crée une référence en lecture seule à une valeur. Cela ne signifie pas que la valeur qu'il détient est immuable, juste que l'identifiant de variable ne peut pas être réaffecté.

    Pour pourquoi utiliser const , @ la réponse de Tibos est géniale.

    Mais vous avez dit:

    D'après ce que je peux dire, il est utilisé pour créer des variables immuables

    C'est faux . Interdire une variable est différente de la réaffectation:

     var hello = 'world' // assigning hello = 'bonjour!' // reassigning 

    Avec const, vous ne pouvez pas faire cela:

     const hello = 'world' hello = 'bonjour!' // error 

    Mais vous pouvez muter votre variable:

     const marks = [92, 83] marks.push(95) console.log(marks) // [92, 83, 95] -> the variable has been mutated. 

    Ainsi, tout processus qui modifie la valeur de la variable sans utiliser le signe = est un muting.

    Remarque: += par exemple est … réaffectation!

     var a = 5 a += 2 // is the same as a = a + 2 

    Ainsi, la ligne de fond est: const ne vous empêche pas de modifier les variables, cela vous empêche de les réaffecter .

    D'après mon expérience, j'utilise const lorsque je souhaite définir quelque chose que je souhaiterais changer plus tard sans avoir à chasser le code à la recherche de bits qui ont été codés en dur, par exemple, un chemin de fichier ou un nom de serveur.

    Cependant, l'erreur dans vos tests est une autre chose, mais il est nécessaire de créer une autre variable appelée x, ce serait un test plus précis.

     const x = 'const'; x = 'not-const'; 

    Vous avez de bonnes réponses, mais gardons cela simple.

    const doit être utilisé lorsque vous avez une constante définie (lire comme: il ne changera pas lors de l'exécution de votre programme).

    Par exemple:

     const pi = 3.1415926535 

    Si vous pensez que c'est quelque chose qui peut être modifié lors d'une exécution ultérieure, utilisez une var .

    La différence pratique, sur la base de l'exemple, est que, avec const vous allez toujours supposer que pi sera de 3,14 […], c'est un fait.

    Si vous le définissez comme un var , il pourrait être de 3,14 […] ou non.

    Pour une réponse plus technique @Tibos est académiquement juste.

    Préférence personnelle vraiment. Vous pouvez utiliser const lorsque, comme vous le dites, il ne sera pas réaffecté et est constant. Par exemple, si vous souhaitez attribuer votre anniversaire. Votre anniversaire ne change jamais afin que vous puissiez l'utiliser comme une constante. Mais votre âge change, ce qui pourrait être une variable.

    Il fournit: 1) une référence constante, par exemple const x = [] – le tableau peut être modifié, mais x ne peut pas pointer vers un autre tableau; Et 2) bloquer la portée. Const et let remplacent ensemble var dans ecma6 / 2015 Voir la discussion à https://strongloop.com/strongblog/es6-variable-declarations/

    'Const' est une indication de votre code que l'identifiant ne sera pas réaffecté. Il s'agit d'un bon article sur l'utilisation de 'const', 'let' ou 'var' https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75#.ukgxpfhao

    Tout d'abord, trois éléments utiles concernant const (autres que les améliorations de portée qu'il partage avec let ):

    • Il documente les personnes qui lisent le code plus tard que la valeur ne doit pas changer.
    • Cela vous empêche (ou quelqu'un qui vient après vous) de changer la valeur à moins qu'elles ne reviennent et changent la déclaration intentionnellement.
    • Cela pourrait permettre au moteur de JavaScript d'analyser en termes d'optimisation. Par exemple, vous avez déclaré que la valeur ne peut pas changer, de sorte que le moteur ne doit pas travailler pour déterminer si la valeur change, de sorte qu'il peut décider d'optimiser en fonction de la valeur qui ne change pas.

    Vos questions:

    Quand est-il approprié d'utiliser const à la place de var ?

    Vous pouvez le faire chaque fois que vous déclarez une variable dont la valeur ne change jamais. Que vous considériez que cela correspond à votre préférence / à la préférence de votre équipe.

    Devrait-il être utilisé chaque fois qu'une variable qui ne va pas être réattribuée est déclarée?

    C'est à vous et à votre équipe.

    Est-ce que cela fait une différence si var is used in place of const` ou vice-versa?

    Oui:

    • var et const ont différentes règles de portée. (Vous avez peut-être voulu comparer avec let plutôt que var .) Plus précisément: const et let sont bloqués et, lorsqu'ils sont utilisés à l'échelle mondiale, ne créent pas de propriétés sur l'objet global (même s'ils créent des globals). var a une portée globale (lorsqu'il est utilisé à l'échelle mondiale) ou la portée de la fonction (même si elle est utilisée dans un bloc), et lorsqu'il est utilisé à l'échelle mondiale, crée une propriété sur l'objet global.
    • Voir mes "trois éléments utiles" ci-dessus, ils s'appliquent tous à cette question.