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ではthisはundefinedになります。
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チャンネルもご覧ください。