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

2017年4月30日

Javascript テクノロジー プログラミング 学習

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

そもそも何なん?

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

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

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

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

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

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

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

strictモードの特徴

No.項目非strictstrict
1.偶発的なグローバル変数グローバル変数に書き込むエラー
2.NaNのような書き込み不可の変数への代入何もおきないエラー
3.削除できないプロパティを削除何もおきないエラー
4.プロパティ名の重複最後に宣言されたモノが有効エラー
5.関数の引数名の重複最後に宣言された引数が有効エラー
6.8進数表記を禁止8進数として処理されるエラー
他にも「変数使用時の単純化」や「evalやaugumentsの単純化」、「予約語の追加」...他にも幾つかの注意点が存在するので、リファレンスページを熟読しておきましょう。

結論

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

関連リンク

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

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ