English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScriptの基本教程

JavaScriptオブジェクト

JavaScript関数

JSHTMLDOM

JSブラウザBOM

AJAXの基本教程

JavaScriptのリファレンスマニュアル

JavaScript 严格モード(use strict)

ECMAScript 5導入されたJavaScriptの厳格モードは選択参加 JavaScriptの制限されたバリエーションの一つです。

厳格モードは単なるサブセットではなく、意図的に通常のコードとは異なる意味を持たせられています。

厳格モードでは「安全」なJavaScriptの記述がより簡単になります。

厳格モードでは、以前受け入れられていた「誤り文法」を実際のエラーに変更します。

厳格モードでは、例えば、宣言されていない変数を使用することはできません。

厳格モードを呼び出す

厳格モードは、"use strict";をスクリプトや関数の先頭に追加することで宣言されます。

スクリプト全体に厳格モードを適用するには、他のすべての宣言の前に「use strict」を入力します:

"use strict";
str="嗨,我是严格模式脚本!";  // 未宣言のstrを使用しているため、エラーが発生します
テストをしてみて‹/›

関数に厳格モードを適用するには、"use strict";を関数の本体に配置し、他のすべての文の前に配置します:

function myFunc() {
  // 関数レベルの厳格モード構文
  "use strict";
  str="大家好,我是严格模式函数!";  // これはエラーが発生します
  return str;
}
テストをしてみて‹/›

厳格モードは、未宣言の変数の使用を防ぐなどの方法で、より簡潔なコードの作成を助けます。

この"use strict"指令は、スクリプトや関数の先頭で認識されます。

シングルクォートとダブルクォートの構文はどちらも受け入れられます('use strict';または"use strict";)。

厳格モードの一般的な制限

ご存知の通り、厳格モードではすべての変数を宣言する必要があります。

宣言されていない識別子に値を割り当てると、ReferenceErrorが発生します:

"use strict";
x= 5; // ReferenceError: x は定義されていません
テストをしてみて‹/›

未宣言のオブジェクトを使用することは許可されていません(オブジェクトも変数です):

"use strict";
coord={x:10,y:20});   // ReferenceError: coord は定義されていません
テストをしてみて‹/›

厳格モードで変数を削除しようとすると、構文エラーが発生します:

"use strict";
var msg="Hello World";
delete msg;// SyntaxError
テストをしてみて‹/›

同様に、厳格モードで関数を削除しようとすると、構文エラーが発生します:

"use strict";
function sum(a,b) {
return a + b;
}
delete sum;// SyntaxError
テストをしてみて‹/›

厳格モードでは、重複する引数名を使用することは許可されていません:

"use strict";
function square(a,a) {  // SyntaxError
return a * a;
}
テストをしてみて‹/›

厳格モードでは、読み取り専用の属性に書き込みを許可されていません:

"use strict";
var person={name:"Akash",age: 22};
Object.defineProperty(person,"gender",{value:"male",writable:false});
person.gender="female";   // TypeError
テストをしてみて‹/›

厳格モードでは、with文を使用することは許可されていません:

"use strict";
with(Math){x=sqrt(25);   // SyntaxError
テストをしてみて‹/›

厳格モードでは、八進数を使用することは許可されていません:

"use strict";
var x = 010;   // SyntaxError
テストをしてみて‹/›

セキュリティの理由から、eval()その呼び出し範囲内で変数を作成することは許可されていません:

"use strict";
eval("var x = \ 10;
console.log(x);   // ReferenceError: x 変数が定義されていません
テストをしてみて‹/›

文字列「eval」は識別子(変数名)として使用できません:

"use strict";
var eval = "oldtoolbag.com";// SyntaxError
テストをしてみて‹/›

文字列「arguments」は識別子(変数名)として使用できません:

"use strict";
var arguments = "oldtoolbag.com";// SyntaxError
テストをしてみて‹/›

今後のECMAScriptバージョンへの道を開く

今後のECMAScriptバージョンでは新しい構文が導入される可能性があります、ES5の厳格モードでは、移行を簡素化するための制限を適用します。

これらの変更を禁止する基本が厳格モードであれば、いくつかの変更を行うのが容易です。

厳格モードでは、以下の識別子リストが予約語になります:

  • implements

  • interface

  • let

  • package

  • private

  • protected

  • public

  • static

  • yield

"use strict";
var package = true;  // これはエラーを引き起こします
テストをしてみて‹/›