"use strict"; JavaScriptコードが「strictモード」で実行されるべきであることを定義します。
"use strict"指令を
"use strict"ディレクティブをJavaScriptの1.8.5で新しく追加された(ECMAScript version 5)
これは、ステートメントが、JavaScriptの以前のバージョンでは無視リテラル式、ではありません。
目的"use strict"コードが「strictモード」で実行されるべきであることを示すためです。
strictモードを使用すると、たとえば、宣言されていない変数を使用することはできません。
strictモードがでサポートされています。
バージョン10からのFirefoxバージョン4からIE。
Chromeバージョン13からSafariバージョン5.1から。
Operaバージョン12から。
strictモードを宣言
strictモードを追加することによって宣言され"use strict";スクリプトまたは関数の先頭に。
スクリプトの先頭で宣言し、それは(スクリプト内のすべてのコードがstrictモードで実行されます)グローバルスコープを持っています。
例
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
»それを自分で試してみてください 関数内で宣言され、それは(関数内のコードのみがstrictモードである)ローカルスコープを持っています。
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14;
// This will cause an error (y is not defined)
}
»それを自分で試してみてください "use strict";構文
構文は、strictモードを宣言するためには、JavaScriptの旧バージョンと互換性を持つように設計されました。
または文字列リテラル、数値リテラル(4 + 5)のコンパイル("John Doe";) JavaScriptプログラムでは、副作用を持ちません。 それは単に非既存の変数にコンパイルし、死にます。
だから、 "use strict" 。 それだけの意味を「理解」の新しいコンパイラに重要。
なぜ厳格なモード?
strictモードでは、それが簡単にJavaScriptを「セキュア」書くことができます。
strictモードの変更は、以前に実際のエラーに「不正な構文」を受け入れました。
例として、通常のJavaScriptでは、変数名をタイプミスすると、新しいグローバル変数を作成します。 strictモードでは、これは不可能誤ってグローバル変数を作成すること、エラーがスローされます。
通常のJavaScriptでは、開発者は、非書き込み可能なプロパティに値を割り当てる任意のエラーフィードバックを受信しません。
strictモードでは、非書き込み可能なプロパティへの割り当て、ゲッター専用のプロパティ、非既存のプロパティ、非既存の変数、または非既存のオブジェクトは、エラーがスローされます。
strictモードで許可されていません
それを宣言せずに、変数を使用して、許可されていません。
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
オブジェクトはあまりにも変数です。
それを宣言せずに、オブジェクトを使用して、許可されていません。
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
変数(またはオブジェクト)を削除することはできません。
"use strict";
var x = 3.14;
delete x; // This
will cause an error
機能を削除することはできません。
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
パラメータ名を複製することは許可されていません。
"use strict";
function x(p1, p1) {}; // This will cause an error
オクタル数値リテラルは許可されません。
"use strict";
var x = 010; // This
will cause an error
エスケープ文字は使用できません。
"use strict";
var x = \010; // This will cause an error
読み取り専用のプロパティへの書き込みが許可されていません。
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
取得専用のプロパティへの書き込みは許可されていません。
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
削除不可プロパティを削除すると、許可されていません。
"use strict";
delete Object.prototype; // This will cause an error
文字列 "evalのは"変数として使用することはできません。
"use strict";
var eval = 3.14; // This will cause an error
文字列 "引数は"変数として使用することはできません。
"use strict";
var arguments = 3.14; // This will cause an error
ステートメントで許可されていません。
"use strict";
with (Math){x = cos(2)}; // This will cause an error
セキュリティ上の理由から、 eval()が呼び出されたスコープ内の変数を作成することはできません。
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
以下のような関数呼び出しではf()この値は、グローバルな目的でした。 strictモードでは、それは今定義されていません。
将来の証明!
今後の予約済みキーワードは、strictモードでは使用できません。 これらは:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
気を付けて!
気を付けて!
"use strict"ディレクティブがのみスクリプトまたは関数の先頭に認識されています。