Articles

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. これらの予約キーワードは、ストリクトモードでも使用できません。

implementsinterfaceletpackageprivateprotectedpublicstaticyield

ストリクトモードのメリット

ストリクトモードを使用することで、以下のようなメリットがあります。

  • よりクリーンなコードを書くのに役立つ
  • これまで受け入れられていたサイレントエラー(不正な構文)を実際のエラーに変え、エラーメッセージを表示する
  • 「安全な」JavaScriptを書くのが容易になる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です