JavaScriptの厳密モードと非厳密モードの違いとは?「use strict」の使い方を解説
JavaScriptの厳密モードと非厳密モードの違い
JavaScriptにおける「use strict」は、文字リテラルとして記述されるディレクティブ(指令)です。JavaScript 1.8.5(ECMAScript 5)で導入されました。その名のとおり、「use strict」を宣言すると、コードが厳密モード(strict mode)で実行されます。一方、宣言しない場合は非厳密モード(通常モード)で実行され、一部のエラーが黙認されたり、緩い挙動が許容されたりします。
厳密モードと非厳密モードの主な違い
非厳密モードでは、宣言していない変数への代入が暗黙的にグローバル変数として扱われるなど、バグの温床となる挙動が許されます。しかし厳密モードでは、こうしたコードはエラーとして検出されます。主な違いは以下のとおりです。
- 宣言していない変数の使用 → エラーになる(非厳密モードでは暗黙のグローバル変数として作成される)
- 読み取り専用プロパティや、削除不可能なプロパティへの代入・削除 → エラーになる
- 重複したパラメータ名や、
with文の使用 → エラーになる(非厳密モードでは許容される) thisの挙動がより厳密になり、意図しないグローバルオブジェクトの参照を防げる
厳密モードの宣言方法
厳密モードを有効にするには、コードの先頭に「use strict」という文字列を追加します。スクリプト全体に適用する場合は、<script>タグ内の冒頭に記述します。
<!DOCTYPE html> <html> <body> <p>変数を使用しているのに宣言を忘れているため、エラーが発生します。</p> <p>F8キーを押すとエラーを確認できます。</p> <script> "use strict"; a = 1; </script> </body> </html>
上記の例では、変数aを宣言せずに値を代入しているため、厳密モードでは「a is not defined」という参照エラーが発生します。非厳密モードであれば、このコードはエラーにならず、aが暗黙的にグローバル変数として作成されます。
関数単位で厳密モードを適用する
スクリプト全体ではなく、特定の関数内だけで厳密モードを有効にすることもできます。その場合は、関数本体の先頭に「use strict」を記述します。
function myFunction() {
"use strict";
// この関数内のコードは厳密モードで実行される
}まとめ
厳密モードは、潜在的なバグを早期に発見し、より安全で高品質なコードを書くための仕組みです。モダンなJavaScript開発では、ESモジュールが自動的に厳密モードで実行されるため、実質的に標準となっています。新規のコードでは「use strict」の宣言を積極的に活用しましょう。
-
JavaScriptにおける関数とメソッドの違いとは?わかりやすく解説
JavaScriptにおいて、関数とメソッドは本質的には同じものです。両者の違いは、メソッドがオブジェクトのプロパティとして定義された関数であるという点にあります。つまり、独立して定義されたものを「関数」、オブジェクトに紐づけられたものを「メソッド」と呼びます。 JavaScriptの関数の基本形 まず、一般的な関数の定義方法を見てみましょう。 function functionname(param1, param2){ // 処理内容 } JavaScriptのメソッドの例 メソッドは、オブジェクトに関連付けられた関数です。次の例では、employeeオブジェクトの中にdetails
-
JavaとJavaScriptの違いとは?歴史・技術・使い分けを徹底解説
ウェブ開発者のジェレミー・キースは2009年、「JavaとJavaScriptの関係は、ハムとハムスターの関係のようなものだ」と語りました。この比喩がどれほど正確かは議論の余地がありますが、その本質は的確です。共通する言語的ルーツを持つにもかかわらず、JavaとJavaScriptはまったく異なる2つのプログラミング言語なのです。年月とともに両者の重なりも多少増えましたが、今なおJavaScriptはウェブサイトにインタラクティブ性をもたらすフロントエンド言語の主流であり続け、Javaはサーバーサイドやアプリケーション開発で人気を保っています。開発者を採用したい方、プログラミングを学びたい方