JavaScript入門 | 例外処理 | Strictモード
strictモードとは?
ECMAScript 5で初めて導入されたstrictモードは、JavaScriptコードにより厳格なエラーチェックを適用する。
strictモードは、スクリプトや関数の先頭で"use strict"ディレクティブを使用して宣言できる。
"use strict" // スクリプト全体をstrictモードに設定する。
try {
num = 3.14; // 宣言されていない変数を使用したためエラーを発生させる。
} catch (ex) {
document.getElementById("text").innerHTML = ex.name + "<br>";
document.getElementById("text").innerHTML += ex.message;
}
このように宣言されたstrictモードは、該当ブロックのコードをstrictモードの構文に従って厳格に検査する。
str = "ミス!"; // 宣言されていない変数を使用したが、自動的にグローバル変数として宣言される。
document.getElementById("noStrict").innerHTML = str + "<br>";
function StrictBlock() {
"use strict" // 関数ブロックだけをstrictモードに設定する。
try {
num = 123 // 宣言されていない変数を使用したためエラーを発生させる。
} catch (ex) {
document.getElementById("funcStrict").innerHTML = ex.name + "<br>";
document.getElementById("funcStrict").innerHTML += ex.message;
}
}
StrictBlock();
上の例で、strictモードではないグローバル領域では、宣言されていない変数を使用しても自動的にグローバル変数として認識される。しかし、strictモードとして宣言された関数ブロックでは、宣言されていない変数を使用するとエラーが発生する。
strictモードをサポートする主なWebブラウザのバージョンは次の通りである。
| ディレクティブ | ie | chrome | firefox | safari | opera |
|---|---|---|---|---|---|
| use strict | 10.0 | 13.0 | 4.0 | 5.1 | 12.0 |
strictモードの特徴
JavaScriptのstrictモードは、従来のJavaScript言語の一部機能を制限した構文を使用する。また、いくつかの重要な機能を修正し、強力なエラーチェックとともに向上したセキュリティ機能を提供する。
従来のJavaScript構文と異なるstrictモードの構文は次の通りである。
| 対象 | 制限事項 |
|---|---|
| 変数 | 宣言されていない変数やオブジェクトを使用できない。eval()関数内で宣言された変数は外部で使用できない。 |
| プロパティ | 読み取り専用プロパティには代入できない。同じプロパティを複数回定義できない。 |
| 関数 | 関数を文やブロック内で宣言できない。 |
| パラメータ | パラメータ名が重複してはならない。argumentsオブジェクトの要素値を変更できない。 |
| 文字列 | 文字列"eval"と"arguments"は使用できない。 |
| 8進数 | 数値リテラルに8進数値を代入できない。 |
| this | thisポインタが指す値がnullやundefinedの場合、グローバルオブジェクトに変換されない。 |
| delete | deleteキーワードを使用できない。 |
| with | with文を使用できない。 |
| 予約語 | 次の予約語は使用できない: implements, interface, let, package, private, protected, public, static, yield。 |