Pendant longtemps, JavaScript a évolué sans problème de compatibilité. De nouvelles fonctionnalités étaient ajoutées au langage tandis que les anciennes ne changeaient pas.
Cela avait l’avantage de ne jamais casser le code existant. Mais l’inconvénient était que toute erreur ou décision imparfaite prise par les créateurs de JavaScript restait coincée dans le langage pour toujours.
C’était le cas jusqu’en 2009, lorsque l’ECMAScript 5 (ES5) est apparu. Il a ajouté de nouvelles fonctionnalités au langage et modifié certaines des fonctionnalités existantes. Pour que l’ancien code continue de fonctionner, la plupart de ces modifications sont désactivées par défaut. Vous devez les activer explicitement avec une directive spéciale : "use strict"
.
« use strict »
La directive ressemble à une chaîne de caractères : "use strict"
ou 'use strict'
. Lorsqu’il est situé en haut d’un script, l’ensemble du script fonctionne de manière « moderne ».
Par exemple :
"use strict";// this code works the modern way...
Bientôt, nous allons apprendre les fonctions (une façon de regrouper les commandes), alors notons d’avance que "use strict"
peut être mis au début d’une fonction. En faisant cela, on active le mode strict dans cette fonction uniquement. Mais généralement, les gens l’utilisent pour tout le script.
"use strict"
est en haut de vos scripts, sinon le mode strict pourrait ne pas être activé.
Le mode strict n’est pas activé ici :
alert("some code");// "use strict" below is ignored--it must be at the top"use strict";// strict mode is not activated
Seuls les commentaires peuvent apparaître au-dessus de "use strict"
.
use strict
Il n’y a pas de directive comme "no use strict"
qui ramène le moteur à l’ancien comportement.
Une fois que nous entrons en mode strict, il n’y a pas de retour en arrière.
Console de navigateur
Lorsque vous utilisez une console de développeur pour exécuter du code, veuillez noter qu’elle ne use strict
pas par défaut.
Parfois, lorsque use strict
fait une différence, vous obtiendrez des résultats incorrects.
Alors, comment faire pour réellement use strict
dans la console ?
D’abord, vous pouvez essayer d’appuyer sur Shift+Enter pour saisir plusieurs lignes, et mettre use strict
en haut, comme ceci :
'use strict'; <Shift+Enter for a newline>// ...your code<Enter to run>
Cela fonctionne dans la plupart des navigateurs, à savoir Firefox et Chrome.
Si ce n’est pas le cas, par exemple dans un vieux navigateur, il existe un moyen laid, mais fiable, d’assurer le use strict
. Mettez-le à l’intérieur de ce genre de wrapper :
(function() { 'use strict'; // ...your code here...})()
Doit-on « utiliser strict » ?
La question peut sembler évidente, mais ce n’est pas le cas.
On pourrait recommander de commencer les scripts avec "use strict"
… Mais vous savez ce qui est cool ?
Le JavaScript moderne supporte les » classes » et les » modules » – des structures de langage avancées (nous y viendrons sûrement), qui permettent d’activer use strict
automatiquement. Nous n’avons donc pas besoin d’ajouter la directive "use strict"
, si nous les utilisons.
Donc, pour l’instant "use strict";
est un invité bienvenu en haut de vos scripts. Plus tard, lorsque votre code sera entièrement dans des classes et des modules, vous pourrez l’omettre.
Pour l’instant, nous avons appris à connaître use strict
en général.
Dans les prochains chapitres, au fur et à mesure que nous apprendrons les fonctionnalités du langage, nous verrons les différences entre le mode strict et l’ancien mode. Heureusement, il n’y en a pas beaucoup et elles améliorent réellement notre vie.
Tous les exemples de ce tutoriel supposent le mode strict, sauf (très rarement) spécification contraire.