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チャンネルもご覧ください。