JavaScript:Strictモードとは

JavaScriptには「Strictモード」と呼ばれるモードが用意されています。
Strictモードにすることで、バグに気付かずに実行が継続されるのを防ぎやすくなり、高速化することもあります。

詳しくはMozillaのページに書かれていますが、この記事では簡単に紹介したいと思います。


Strictモードに設定するためには、以下の2つの方法があります。
(export句を使用した方法もありますが、この記事では割愛します)

1.スクリプト全体で定義

スクリプトの最初に「’use strict’;」を記述することで、そのスクリプト全体がStrictモードになります。

・サンプルコード

2.関数全体で定義

関数の最初に「’use strict’;」を記述することで、その関数全体がStrictモードになります。

・サンプルコード


Strictモードに設定することで、例えば以下のような挙動変更が行われます。

1.バグになりやすい誤りがある場合に異常終了させる

例えば、定義済みの変数を参照しようとして変数名の記述を誤った場合、Strictモードの場合は異常終了させることができます。

・サンプルコード(非Strictモード)

・実行結果(非Strictモード)

・サンプルコード(Strictモード)

・実行結果(Strictモード)

2.セキュリティーの強化

JavaScriptでは、必ずオブジェクトを用意する必要があり、自分でオブジェクトを定義しない場合は「グローバルオブジェクト」と呼ばれるブラウザや実行環境が用意したオブジェクトが使用されます。
また、キーワード「this」を使用することで、記述箇所を動かしているオブジェクトの情報を取得することができます。
「this」によりグローバルオブジェクトを参照された場合、セキュリティー上の問題が発生する可能性があるため、Strictモードではグローバルオブジェクトが参照されるようなケースで「this」キーワードは「undefined」を返すようになります。

・サンプルコード(非Strictモード)

・実行結果(非Strictモード)

・サンプルコード(Strictモード)

・実行結果(Strictモード)

3.将来(最新)のJavaScriptの仕様に対応する

例えば、キーワード「private」は、2021/03/31現在でいくつかのブラウザやNode.jsでは使用可能です。
非Strictモードではこのキーワードを変数名として使用できますが、Strictモードではエラーにできます。

・サンプルコード(非Strictモード)

・実行結果(非Strictモード)

・サンプルコード(Strictモード)

・実行結果(Strictモード)


いかがでしたでしょうか?

元々はthisの挙動について書こうと思っていたのですが、thisの挙動はStrictモードによっても変化するので、先にStrictモードについて書きました。
JavaScriptの弱点としてエラーで落ちて欲しい場面で落ちない(その結果誤りに気付くのが遅くなる)というものがあると思いますが、Strictモードはその弱点を埋めるのに良い機能だと思いました。

コメントを残す

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

CAPTCHA