JavaScript “use strict”
'use strict';
では、JavaScriptコードを「strict mode」で実行することを明記しています。 これにより、良質で安全なJavaScriptコードを簡単に書くことができます。 例えば、
myVariable = 9;
ここでは、myVariableを宣言せずに作成しています。 これは、JavaScriptのグローバル変数として機能します。 しかし、これをストリクトモードで使用すると、プログラムがエラーを起こします。 例えば、
'use strict';// ErrormyVariable = 9;
上記のコードでは、myVariableが宣言されていないため、エラーが発生します。
このプログラムがストリクトモードであることを示すために、
'use strict';
プログラムの先頭にを使用しています。
プログラムの先頭に'use strict';
"use strict";
をつけることで、strict modeを宣言することができます。
プログラムの最初にストリクトモードを宣言すると、グローバル スコープになり、プログラム内のすべてのコードがストリクトモードで実行されます。
変数でのストリクトモード
ストリクトモードでは、宣言せずに変数を使用するとエラーになります。
例えば、
console.log("some code");// 'use strict' is ignored// must be at the top"use strict";x = 21; // does not throw an error
関数内でのストリクトモード
関数内でもストリクトモードを使うことができます。
myVariable = 9;console.log(myVariable); // 9function hello() { // applicable only for this function 'use strict'; string = 'hello'; // throws an error}hello();
関数内で'use strict';
を使用すると、関数内のコードはストリクトモードになります。
上記のプログラムでは、'use strict';
hello()
関数内で使用されています。
プログラムの先頭で'use strict';
を宣言した場合、関数内でも宣言せずに変数を使用することはできません。 例えば、
// applicable to whole program'use strict';function hello() { string = 'hello'; // throws an error}hello();
注意 : {}
の中括弧を持つブロック文には、ストリクトモードは適用されません。
ストリクトモードで許可されないもの
1. 宣言されていない変数は許されません。
'use strict';a = 'hello'; // throws an error
2. 宣言されていないオブジェクトは許されません。
'use strict';person = {name: 'Carla', age: 25}; // throws an error
3. オブジェクトの削除はできません。
'use strict';let person = {name: 'Carla'};delete person; // throws an error
4. パラメータ名の重複はできません。
"use strict";function hello(p1, p1) { console.log('hello')}; // throws an errorhello();
5.
'use strict';let obj1 = {};Object.defineProperty(obj1, 'x', { value: 42, writable: false });// assignment to a non-writable propertyobj1.x = 9; // throws an error
6. ゲッターオンリーのプロパティに割り当てることはできません
'use strict';let obj2 = { get x() { return 17; } };// assignment to a getter-only propertyobj2.x = 5; // throws an error
7.
'use strict';let obj = {};Object.preventExtensions(obj);// Assignment to a new property on a non-extensible objectobj.newValue = 'new value'; // throws an error
8. 8進法は使用できません。
'use strict';let a = 010; // throws an error
9.
'use strict';let arguments = 'hello'; // throws an errorlet eval = 44;
10. これらの予約キーワードは、ストリクトモードでも使用できません。
implements
interface
let
package
private
protected
public
static
yield
ストリクトモードのメリット
ストリクトモードを使用することで、以下のようなメリットがあります。
- よりクリーンなコードを書くのに役立つ
- これまで受け入れられていたサイレントエラー(不正な構文)を実際のエラーに変え、エラーメッセージを表示する
- 「安全な」JavaScriptを書くのが容易になる
。