Damien Flandrin

Tutoriels, astuces et conseils sur le développement web par un développeur web

Tutoriel - Utiliser le mode strict de JavaScript

il y a 10 mois · 4 MIN DE LECTURE
#Tutoriel  #Javascript 

Qu'est-ce que le mode Strict ?

Le mode strict a été introduit dans ECMAScript 5 (ES5). Il s'agit d'un mode plus stricte ou restreinte du langage JavaScript qui produit des erreurs pour des erreurs qui sont traitées généralement en silence. Par exemple, en mode non restreint, si vous initialisez une variable sans la déclarer à l'aide du mot-clé var (par exemple x = 5 ;), l'interpréteur JavaScript supposera que vous faisiez référence à une variable globale et si cette variable n'existait pas, il en créera automatiquement une.

De plus, les fonctions obsolètes peuvent également générer des erreurs en mode strict. Par conséquent, le mode strict réduit les bogues, améliore la sécurité et la performance globale de votre application.

Activation du mode Strict

Pour activer le mode strict, il vous suffit d'ajouter la chaîne "use strict" au début de votre script, comme dans l'exemple suivant :

"use strict";
x = 5; // ReferenceError: x is not defined
console.log(x);

Si vous ajoutez la directive "use strict" comme première ligne de votre programme JavaScript, le mode strict s'applique à tout le script. Mais, vous pouvez aussi activer le mode strict uniquement à l'intérieur d'une fonction, comme celle-ci :

x = 5;
console.log(x); // 5
function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();

À savoir : La directive "use strict" n'est reconnue qu'au début d'un script ou d'une fonction. Tous les navigateurs modernes supportent la directive "use strict" sauf Internet Explorer 9 et les versions inférieures. De plus, les navigateurs qui ne supportent pas la directive "use strict" l'ignorent silencieusement et analysent le JavaScript en mode non restreint.

Restrictions générales en mode strict

Le mode strict modifie à la fois la syntaxe et le comportement d'exécution. Dans les sections suivantes, nous examinerons les restrictions générales qui sont appliquées dans le mode strict :

Les variables non déclarées ne sont pas autorisées

Comme vous le savez déjà, en mode strict, toutes les variables doivent être déclarées. Si vous attribuez une valeur à un identifiant qui n'est pas une variable déclarée, l'erreur ReferenceError sera affiché.

"use strict";

function doSomething() {
    msg = "Hello world!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());

Supprimer une variable ou une fonction n'est pas autorisée

En mode strict, si vous essayez de supprimer une variable ou une fonction, une erreur de syntaxe sera générée. Alors qu'en mode non restreint, une telle tentative échoue silencieusement et l'expression delete est évaluée à false.

"use strict";
var person = {name: "Damien", age: 25};
delete person; // SyntaxError

De même, lorsque vous essayez de supprimer une fonction en mode strict, vous obtiendrez une erreur de syntaxe :

"use strict";
function sum(a, b) {
    return a + b;
}
delete sum; // SyntaxError

La duplication d'un nom de paramètre n'est pas autorisée

En mode strict, une erreur de syntaxe sera générée, si une déclaration de fonction a deux ou plusieurs paramètres avec le même nom. En mode non restreint, aucune erreur ne se produit.

"use strict";

function test(a, a) { // SyntaxError
    return a * a;
}
console.log(square(2, 2));

La méthode d'évaluation ne peut pas modifier la portée

En mode strict, pour des raisons de sécurité, le code passé à eval() ne peut pas déclarer/modifier des variables ou définir des fonctions dans l'environnement comme il le peut en mode non restreint.

"use strict";
eval("var x = 5;");
console.log(x); // ReferenceError: x is not defined

L'évaluation et les arguments ne peuvent pas être utilisés comme identificateurs

En mode strict, les noms eval et arguments sont traités comme des mots-clés, ils ne peuvent donc pas être utilisés comme noms de variables, noms de fonctions, noms de paramètres de fonctions, etc.

"use strict";
var eval = 10; // SyntaxError
console.log(eval);

L'instruction with n'est pas autorisée

En mode strict, l'instruction with n'est pas autorisée. L'instruction with ajoute les propriétés et les méthodes de l'objet à la portée courante. Ainsi, les instructions imbriquées à l'intérieur de l'instruction with peuvent appeler les propriétés et les méthodes de l'objet directement sans y faire référence.

"use strict";

// Sans with
var radius1 = 5;
var area1 = Math.PI * radius1 * radius1;

// Avec with
var radius2 = 5;
with(Math) { // SyntaxError
    var area2 = PI * radius2 * radius2;
} 

Écrire à une propriété en lecture seule n'est pas autorisé

En mode strict, assigner une valeur à une propriété non inscriptible, une propriété get-only ou une propriété inexistante lancera une erreur. En mode non restreint, ces tentatives échouent silencieusement.

"use strict";

var personne = {name: "Damien", age: 25};

Object.defineProperty(personne, "genre", {value: "homme", writable: false});
personne.genre = "femme"; // TypeError

Ajouter une nouvelle propriété à un objet non extensible n'est pas autorisé

En mode strict, les tentatives de création de nouvelles propriétés sur des objets non extensibles ou inexistants lanceront également une erreur. Mais en mode non restreint, ces tentatives échouent silencieusement.

"use strict";

var person = {name: "Damien", age: 25};

console.log(Object.isExtensible(personne)); // true
Object.freeze(personne); //  verrouiller l'objet personne
console.log(Object.isExtensible(personne)); // false
personne.genre = "homme"; // TypeError

Les nombres octals ne sont pas permis

En mode strict, les nombres octaux (chiffres précédés d'un zéro, par exemple 010, 0377) ne sont pas autorisés. Cependant, il est supporté dans tous les navigateurs en mode non restreint. Toutefois, dans ES6, les nombres octaux sont pris en charge en préfixant un nombre par 0o, c'est-à-dire 0o10, 0o377, etc.

"use strict";

var x = 010; // SyntaxError
console.log(parseInt(x));

Vous pouvez voir clairement dans les exemples ci-dessus comment le mode strict peut vous aider à éviter de faire des erreurs communes qui passent souvent inaperçues lors de la rédaction d'un programme JavaScript.

Les mots-clés réservés pour l'avenir ne sont pas autorisés

Le mode strict impose des restrictions sur l'utilisation de ces mots-clés qui sont réservés pour l'avenir.

Selon les dernières normes ECMAScript 6 (ou ES6), ces mots-clés sont des mots-clés réservés lorsqu'ils se trouvent en mode strict : await, implements, interface, package, private, protected, public, and static. Cependant, pour une compatibilité optimale, vous devriez éviter d'utiliser les mots-clés réservés comme noms de variables ou noms de fonctions dans votre programme.

Astuce : Les mots réservés, également appelés mots-clés, sont des mots spéciaux qui font partie de la syntaxe du langage JavaScript, par exemple var, if, fo, function, etc.

···

Damien Flandrin

Je suis développeur web pour l'agence Carredas, je fais principalement du PHP avec Laravel et Prestashop.
comments powered by Disqus


Développeur Web - Damien Flandrin