strictモードで厳格なjavaScriptを書こう
strictモードとは?
近頃見られるようになった下記のような記述。javaScriptを書く際、必須になりつつあります。
(function() { 'use strict'; // 処理 })();
jsファイルの先頭に
'use strict';
と記述することにより、strictモードを 宣言することができます。strictモード下では、厳格なjavaScriptを書くことが求められるので、必然的に バグの混入を減らすことができます。
ちなみに
(function() { })();
の部分は即時関数と呼ばれ、スコープ汚染を防ぐために用いられるものです。ここではテーマの範囲外になるので 割愛します。
効果
- 暗黙的なグローバル変数の禁止
- 代入不可なプロパティへの代入の禁止
- 削除できないプロパティの削除の禁止
- 関数の引数名の重複の禁止
- 幾つかの識別子は予約語にするため使用禁止(staticとか)
- 8進数表記の禁止
- eval 変数、arguments 変数の宣言禁止
- with 禁止
etc...って感じですね。
下の6、7、8はいいとして、1から5の効果は僕としては、かなり、ありがたいと思います。
代表効果の例
strictモードには、いくつかの効果がありますが、そのうちのもっとも基本的な効果がvar
のつけ忘れを防げることです。上記の効果のうちの1.暗黙的なグローバル変数の禁止に当たる機能
です。
(function() { 'use strict'; var x = 'hello'; // ok y = 'goodnight'; // error })();
コンソールで確認すればUncaught ReferenceError: y is not defined
と注意されているはずです。ちょっとしたことですが、javaScriptは基本ゆるい言語
なので、こういうのが案外、助けになったりします。
注意点
- IE10以下ではサポートされていない
- 先頭以外でstrictを宣言しても strict モードにならない
1はそのままの意味です。Internet Explorerは昔からjavaScriptと 相性が悪いのです。
2は下記のコードを見てもらうのが早いです。
(function() { var x = 'hello'; 'use strict'; y = 'goodnight'; // エラー吐かない // 両方の変数がコンソールに出力されてしまう! console.log(x); console.log(y); })();