[Javascript] “use strict”で何が変わるのか調査

man-641691_1280
LINEで送る
Share on GREE
Share on LinkedIn

ECMAScript5からstrictモードというのが採用になった事を今更知った。
一体何なんだ???strictモードって???
簡単に聞いたところ、JSで内のエラーを的確にチェックできるようになるモードらしい・・・なんやわからん・・・
onErrorのようなイベントなのか?それとも、エラーログの出力が変わってデバッグしやすくなるのか?
そんな僕のようなstrictモードを知らない人の為に、ちゃんと理解して思うと思います。

そもそも何なん?

strictモードは直訳すると「厳格なモード」という事なのですが、何が厳格なんでしょう?
「コード内に存在する潜在的な問題を早期に発見しやすくなる」とリファレンスページに書かれていますが、まだわからん・・・
ちなみに、strictモードは、JSの冒頭や関数の開始に

と記述するだけなのですが、逆にこの記述がないモードを「非strictモード」と言うらしいです。

推奨されているが強制ではない

ECMAScript5の時点で、推奨モードになっていますが、ブラウザ対応などの観点から強制はできない状態らしいですね。
恐らくIEがバージョン11からの対応だからでしょう。
まだまだver9なども現役の場合が多いので、スマホだけのページなら別だが、PCベースのページでは強制できない実態なのでしょう。

もっと厳密な違いが知りたい

ここまでの段階で、strictモードがまあまあ重要という事だけは分かりましたが、実際にどのように役に立つモードなのかがまだまだ理解できません。

ミスからエラーに変換される

strictモードは、今までエラーにならなかったプログラミングの記述を厳格にエラーとして表示されることで、ちゃんとしたコードに修正することが目的なようです。
例えば、変数の宣言がされていない場合は、非strictモードであれば、グローバル変数として扱われ、恐らく実行していても気がつかない見えない不具合となるところを、strictモードでは、エラーになってくれるので、コードが修正でき、その後のバージョンアップやコード改修の時に副次的に発生するバグにできるだけ速く対応できるというのが、このモードの目指しているところなのでしょう。
今まではjavascriptは、型もclassもゆるゆるの言語として、ある意味ありがたく使えていたのですが、昨今のWEBアプリケーション化に伴う、プログラムを厳格な書き方をしていなければ、そんでもない不具合が潜んでいても気が付かないというのが、言語利用者が物申したのでしょうね。

strictモードの特徴

No. 項目 非strict strict
1. 偶発的なグローバル変数 グローバル変数に書き込む エラー
2. NaNのような書き込み不可の変数への代入 何もおきない エラー
3. 削除できないプロパティを削除 何もおきない エラー
4. プロパティ名の重複 最後に宣言されたモノが有効 エラー
5. 関数の引数名の重複 最後に宣言された引数が有効 エラー
6. 8進数表記を禁止 8進数として処理される エラー

他にも「変数使用時の単純化」や「evalやaugumentsの単純化」、「予約語の追加」…他にも幾つかの注意点が存在するので、リファレンスページを熟読しておきましょう。

結論

上記のような内容を見る限り、今まで作ってきたJSプログラムをstrictモードにしたら、エラーが出まくる事は間違いありません。
だけど、より厳格なプログラムを書くという行為は開発者としてのあるべき姿なので、今後のjavascript開発としては、積極的に取り込む事を推奨します。
検索するとたくさんのページでサンプルプログラムなどが載っているので、ぜひとも厳格モードに対応するように意識付けましょう。

関連リンク

Strict モード – JavaScript | MDN
ECMAScript 5 Strict Mode ブラウザ対応表

Leave a Reply

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


*