Mode strict JavaScript


Le mode strict JavaScript (mode strict) s'exécute dans des conditions strictes.


Utiliser la directive "use strict"

La directive "use strict" est nouvelle dans JavaScript 1.8.5 (ECMAScript5).

Il ne s'agit pas d'une déclaration, mais d'une expression littérale, qui sera ignorée dans les anciennes versions de JavaScript.

Le but de "use strict" est de préciser que le code est exécuté dans des conditions strictes.

Vous ne pouvez pas utiliser de variables non déclarées en mode strict.


NoteNavigateurs prenant en charge le mode strict :
Note支持严格模式的浏览器:
Internet Explorer 10 +、 Firefox  4+ Chrome  13+、 Safari 5.1+、 Opera 12+。
Internet Explorer 10+, Firefox 4 + Chrome 13+, Safari 5.1+, Opéra 12+.

Déclaration de mode strict

Le mode strict est déclaré en ajoutant une expression « use strict » en tête d'un script ou d'une fonction.

Dans l'exemple, nous pouvons appuyer sur F12 dans le navigateur (ou cliquer sur "Outils>Plus d'outils>Outils de développement") pour activer le mode débogage et afficher le message d'erreur.


Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用未定义的变量。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14;       // 报错 (x 未定义)
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur "Exécuter l'instance" bouton Afficher les instances en ligne


Instances

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h2>全局 "use strict" 声明.</h2>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
myFunction();
function myFunction() {
    y = 3.14;   // 报错 (y 未定义)
}
</script>

</body>
</html>

Instances en cours d'exécution»

Cliquez sur le bouton "Exécuter l'instance" pour afficher l'instance en ligne

Déclarée à l'intérieur de la fonction en tant que portée locale (utilisez uniquement le mode strict dans la fonction) :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<p>在函数内使用 "use strict" 只在函数内报错。
</p>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
x = 3.14;       // 不报错 
myFunction();
function myFunction() {
   "use strict";
    y = 3.14;   // 报错 (y 未定义)
}
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton "Exécuter l'instance" pour afficher l'instance en ligne


Pourquoi utiliser le mode strict :

  • Éliminer certains aspects déraisonnables et imprécis de la syntaxe Javascript et réduire certains comportements étranges

  • Éliminer certains aspects dangereux du code ; fonctionnement, garantissant la sécurité d'exécution du code

  • Améliorer l'efficacité du compilateur et augmenter la vitesse d'exécution

  • ouvrir la voie à de nouvelles versions de Javascript à l'avenir ; .

Le « mode strict » reflète l'orientation de développement plus raisonnable, plus sûre et plus rigoureuse de Javascript. Les navigateurs grand public, y compris IE 10, le prennent déjà en charge, et de nombreux grands projets ont déjà commencé à l'adopter pleinement.

D'un autre côté, le même code peut avoir des résultats d'exécution différents en "mode strict" ; certaines instructions qui peuvent être exécutées en "mode normal" ne pourront pas être exécutées en "mode strict". La maîtrise de ces contenus vous aidera à comprendre Javascript plus en détail et fera de vous un meilleur programmeur.


Restrictions de mode strictes

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

Instances

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用未定义的变量。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14;       // 报错 (x 未定义)
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Note对象也是一个变量。

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用为定义的对象。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = {p1:10, p2:20};      // 报错 (x 未定义)
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

La suppression de variables ou d'objets n'est pas autorisée.

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许删除变量或对象。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var x = 3.14;
delete x;    
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

La suppression de fonctions n'est pas autorisée.

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许删除函数。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
function x(p1, p2) {}; 
delete x;  
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Les noms de variables en double ne sont pas autorisés :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许变量重名。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
function x(p1, p1) {};   // 报错
</script>
	
</body>
</html>

Exécuter l'instance»

Cliquez sur l'icône Bouton "Exécuter l'instance" Afficher les instances en ligne

Octal non autorisé :

Instances

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用八进制。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var x = 010;             // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Les caractères d'échappement ne sont pas autorisés :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用转义字符。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var x = 0;            // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

L'attribution d'attributs en lecture seule n'est pas autorisée :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许对只读属性赋值。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Ne permet pas la lecture en utilisant la méthode getter sur un Attribuer des valeurs aux attributs

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许对一个使用getter方法读取的属性进行赋值。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14;            // 报错
</script>

</body>
</html>

Exécuter l'instance »

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Non autorisé à supprimer un attribut qui n'est pas autorisé à être supprimé :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许删除一个不允许删除的属性值。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
delete Object.prototype; // 报错
</script>

</body>
</html>

Instance en cours d'exécution »

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

La variable le nom ne peut pas utiliser la chaîne "eval":

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>变量名不能使用 "eval" 字符串。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var eval = 3.14;         // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur "Exécuter l'instance" bouton pour visualiser l'instance en ligne

Le nom de la variable ne peut pas utiliser la chaîne "arguments" :

Exemple

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>变量名不能使用 "arguments" 字符串。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var arguments = 3.14;    // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Les déclarations suivantes ne sont pas autorisées :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>不允许使用以下这种语句。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
with (Math){x = cos(2)}; // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Échéant pour des raisons de sécurité, dans Les variables créées par scope eval() ne peuvent pas être appelées :

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
	
<h1>使用 "use strict":</h1>
<h3>由于一些安全原因,在作用域 eval() 创建的变量不能被调用。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
eval ("var x = 2");
alert (x);               // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur le bouton "Exécuter l'instance" pour afficher les instances en ligne

interdit à ce mot-clé de pointer vers l'objet global.

function f(){
	return !this;
} 
// 返回false,因为"this"指向全局对象,"!this"就是false

function f(){ 
	"use strict";
	return !this;
} 
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

Par conséquent, lors de l'utilisation du constructeur, si vous oubliez d'ajouter new, cela ne pointera plus vers l'objet global, mais une erreur sera signalée.

function f(){
	"use strict";
	this.a = 1;
};
f();// 报错,this未定义

Mots-clés réservés

Afin de passer aux nouvelles versions de Javascript à l'avenir, le mode strict a ajouté de nouveaux mots-clés réservés :

  • impléments

  • interface

  • let

  • package

  • privé

  • protégé

  • public

  • statique

  • rendement

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<h1>使用 "use strict":</h1>
<h3>严格模式不允许使用保留关键字。</h3>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
var public = 1500;      // 报错
</script>

</body>
</html>

Exécuter l'instance»

Cliquez sur " Exécutez le bouton « Exemple » pour afficher des exemples en ligne


Note"use strict" 指令只运行出现在脚本或函数的开头。