JavaScriptにおける`strict mode`

JavaScriptにおける`strict mode`

この記事ではJavaScriptにおけるstrict modeについて説明します。

YouTube Video

JavaScriptにおけるstrict mode

JavaScriptにおけるstrict mode(厳格モード)は、コードをより安全に、エラーを防ぐために導入されたECMAScript 5(ES5)の機能です。厳格モードを使用すると、いくつかの緩い文法や潜在的に危険な機能が無効になり、より厳格なエラーチェックが実行されます。これにより、開発者は予期せぬ動作を回避し、より堅牢でパフォーマンスの高いコードを記述することができます。

strict modeの有効化

strict modeを有効にするためには、コードの先頭に次のようなディレクティブを追加します。

1"use strict";

この宣言は、スクリプト全体または関数単位で適用できます。たとえば、スクリプト全体に適用する場合、次のように記述できます。

1"use strict";
2
3function example() {
4    // Strict mode is applied
5}

関数単位で適用する場合、次のように記述できます。

1function example() {
2    "use strict";
3    // Strict mode is applied only within this function
4}

strict modeはスコープ単位で適用されるため、関数内だけで有効にすることも可能です。また、モジュールではデフォルトでstrict modeが有効になっているため、モジュール内で個別に宣言する必要はありません。

strict modeの主な特徴と違い

strict modeを使用することで、いくつかのJavaScriptのデフォルトの動作が変更されます。以下はその主な例です。

暗黙的なグローバル変数の禁止

通常のJavaScriptでは、変数の宣言を省略した場合、自動的にグローバル変数として定義されますが、strict modeではこれはエラーとなります。

1"use strict";
2
3x = 10;  // Error: x is not defined

変数は必ずvar, let, constのいずれかを使用して宣言しなければなりません。

予約語の使用制限

将来のJavaScriptバージョンで使用される可能性のあるキーワード(例: implements, interface, package など)は、strict modeでは変数名や関数名として使用できません。

1"use strict";
2
3var package = "strict mode";  // Error: Unexpected strict mode reserved word

thisの扱いの変更

通常のモードでは、関数内でthisはグローバルオブジェクト(ブラウザではwindow)を指しますが、strict modeではthisundefinedになります。

1"use strict";
2
3function example() {
4    console.log(this);  // undefined
5}
6
7example();

これにより、thisの誤使用によるバグを防ぐことができます。

削除不可能なプロパティの削除禁止

通常のモードでは、削除不可能なオブジェクトのプロパティをdeleteしようとすると、エラーなしに無視されますが、strict modeではエラーがスローされます。

1"use strict";
2
3var obj = Object.freeze({name: "John"});
4delete obj.name;  // Error: Cannot delete property 'name'

重複するパラメータ名の禁止

通常のモードでは、同じ名前のパラメータを複数回宣言することができますが、strict modeではエラーが発生します。

1"use strict";
2
3function example(a, a) {
4    // Error: Duplicate parameter name not allowed in this context
5}

with文の禁止

with文はコードの可読性を低下させる可能性があり、strict modeでは使用が禁止されています。

1"use strict";
2
3with (Math) {
4    // Error: Strict mode code may not include a with statement
5}

strict modeの利点

strict modeは、いくつかの点でコードの安全性と効率性を向上させます。

エラー検出の向上

strict modeでは、通常のモードでは見逃されるエラーが検出されるため、開発者が潜在的なバグを早期に発見することができます。たとえば、意図しないグローバル変数の作成や、予約語の誤用を防ぎます。

パフォーマンスの向上

strict modeでは、JavaScriptエンジンがコードの最適化をより効率的に行えるようになります。これにより、実行速度が向上する可能性があります。

コードのセキュリティ向上

thisの扱いが厳格になり、不要なグローバルオブジェクトへのアクセスを防ぐため、コードのセキュリティが向上します。また、予約語の使用制限により、将来的なキーワードとの衝突も避けられます。

互換性と注意点

strict modeはECMAScript 5で導入されたため、それ以前のブラウザではstrict modeはサポートされていません。しかし、strict modeを有効にしても、非対応のブラウザでは単に無視されるだけで、スクリプト全体が壊れることはありません。そのため、通常は安心して使用できます。

ただし、strict modeを既存の大規模プロジェクトに突然導入する場合、意図しないエラーが発生する可能性があるため、テストを十分に行うことが重要です。

結論

JavaScriptのstrict modeは、コードの品質を向上させるために非常に有用な機能です。特に、大規模なプロジェクトやチームでの開発では、予期せぬバグやエラーを未然に防ぎ、コードの可読性や保守性を高めるために、積極的に使用することをお勧めします。

strict modeを理解し、適切に適用することで、JavaScriptの潜在的な落とし穴を避け、より安全で効率的な開発が可能になります。

YouTubeチャンネルでは、Visual Studio Codeを用いて上記の記事を見ながら確認できます。 ぜひYouTubeチャンネルもご覧ください。

YouTube Video