JavaScript 厳密モード


JavaScript 厳密モードは厳密な条件下で実行されます。


「use strict」ディレクティブを使用する

「use strict」ディレクティブは、JavaScript 1.8.5 (ECMAScript5) で新しく追加されました。

これはステートメントではなく、リテラル式であり、古いバージョンの JavaScript では無視されます。

「use strict」の目的は、コードが厳密な条件下で実行されることを指定することです。

厳密モードでは宣言されていない変数を使用できません。


Note厳密モードをサポートするブラウザ:
Internet Explorer 10以降、Firefox 4以降 Chrome 13 以降、Safari 5.1 以降、Opera 12 以降。

Strict モードの宣言

Strict モードは、スクリプトまたは関数の先頭に「use strict」式を追加することで宣言されます。

この例では、ブラウザで F12 を押す (または「ツール > その他のツール > 開発者ツール」をクリック) ことでデバッグ モードをオンにし、エラー メッセージを表示できます。


インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します

インスタンス

<!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>

インスタンス»
「インスタンスを実行」をクリックします。オンライン インスタンスを表示するためのボタン
関数内で宣言されているのはローカル スコープです (関数内では厳密モードのみを使用します):

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>

Run Instance»
[Run Instance] ボタンをクリックして、オンライン インスタンスを表示します

厳密モードを使用する理由:


Javascript 構文の不合理で不正確な側面を削除し、奇妙な動作を軽減します

  • コード実行の安全でない側面をいくつか削除し、コード実行の安全性を確保します。 ;

  • コンパイラの効率を向上させ、実行速度を向上させます。

  • 将来の新しいバージョンの Javascript への道を開きます。

  • 「厳密モード」は、IE 10 を含む主流ブラウザーがすでにそれをサポートしており、多くの大規模プロジェクトがそれを完全に採用し始めています。

  • 一方、同じコードでも「厳密モード」では実行結果が異なる場合があります。「通常モード」で実行できる一部のステートメントは「厳密モード」では実行されません。これらの内容をマスターすると、JavaScript をより詳しく理解し、より優れたプログラマーになれるでしょう。

モードの厳格な制限

未宣言の変数の使用を許可しないでください:

インスタンス

<!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>

インスタンスの実行»
オンラインインスタンスを表示するには、[インスタンスの実行]ボタンをクリックしてください

オブジェクトも変数です。
Note

インスタンス

<!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>

インスタンスの実行 »

オンラインインスタンスを表示するには、「インスタンスの実行」ボタンをクリックしてください

変数またはオブジェクトの削除は許可されていません。

インスタンス

<!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>

インスタンスの実行 »

オンラインインスタンスを表示するには、「インスタンスの実行」ボタンをクリックしてください

関数の削除は許可されていません。

インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します

重複する変数名は許可されません:

インスタンス

<!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>

インスタンスを実行する»

「インスタンスの実行」ボタンをクリックして、オンライン インスタンスを表示します

8 進文字は使用できません:

インスタンス

<!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>

インスタンスの実行»

オンライン インスタンスを表示するには、「インスタンスの実行」ボタンをクリックします

エスケープ文字は使用できません:

インスタンス

<!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>

インスタンスの実行»

オンラインインスタンスを表示するには、[インスタンスの実行]ボタンをクリックしてください

読み取り専用プロパティの割り当ては許可されていません:

インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します

getterメソッドを使用して読み取られたプロパティの割り当ては許可されていません

インスタンス

<!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>

走るインスタンス»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します

削除が許可されていない属性は削除できません:

インスタンス

<!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>

インスタンスを実行»

オンライン インスタンスを表示するには、[インスタンスの実行] ボタンをクリックします

変数名には「eval」文字列を使用できません:

インスタンス

<!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>

インスタンスの実行»

オンライン インスタンスを表示するには、[インスタンスの実行] ボタンをクリックします

変数名には「引数」文字列を使用できません:

Instance

<!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>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します

次のステートメントは許可されません:

インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」をクリックしますオンライン インスタンスを表示するボタンをクリックします。 インスタンス

セキュリティ上の理由により、スコープ内の eval() によって作成された変数を呼び出すことはできません:

インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」をクリックしますオンライン インスタンスを表示するためのボタン

禁止 this キーワードはグローバル オブジェクトを指します。

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

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

したがって、コンストラクターを使用するときに、new を追加するのを忘れると、これはグローバル オブジェクトを指さなくなり、エラーが報告されます。 rreeeedrerreee reservedキーワードは、将来、JavaScriptの新しいバージョンに移行するために順序で、Strict Modeがいくつかの新しい予約されたキーワードを追加しました。


プライベート

    保護
  • パブリック
  • 静的
  • インスタンス
  • function f(){
    	"use strict";
    	this.a = 1;
    };
    f();// 报错,this未定义

  • インスタンスの実行»

    「インスタンスの実行」ボタンをクリックして、オンライン インスタンスを表示します
  • 「use strict」ディレクティブは、スクリプトまたは関数の先頭にある場合にのみ実行されます。