読者です 読者をやめる 読者になる 読者になる

WebEngine

web、プログラミング関係について書いていきます。あなたの優しい眼差しがブログの成長につながりますのでどうぞよろしく。

strictモードで厳格なjavaScriptを書こう

strictモードとは?

近頃見られるようになった下記のような記述。javaScriptを書く際、必須になりつつあります。

(function() {
  'use strict';
  
  // 処理
})();


jsファイルの先頭に

'use strict'; 

と記述することにより、strictモードを 宣言することができます。strictモード下では、厳格なjavaScriptを書くことが求められるので、必然的に バグの混入を減らすことができます。

ちなみに

(function() {
})();

の部分は即時関数と呼ばれ、スコープ汚染を防ぐために用いられるものです。ここではテーマの範囲外になるので 割愛します。


効果

  1. 暗黙的なグローバル変数の禁止
  2. 代入不可なプロパティへの代入の禁止
  3. 削除できないプロパティの削除の禁止
  4. 関数の引数名の重複の禁止
  5. 幾つかの識別子は予約語にするため使用禁止(staticとか)
  6. 8進数表記の禁止
  7. eval 変数、arguments 変数の宣言禁止
  8. 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は基本ゆるい言語 なので、こういうのが案外、助けになったりします。

注意点

  1. IE10以下ではサポートされていない
  2. 先頭以外でstrictを宣言しても strict モードにならない

1はそのままの意味です。Internet Explorerは昔からjavaScriptと 相性が悪いのです。

2は下記のコードを見てもらうのが早いです。

(function() {
  var x = 'hello';

  'use strict';
  y = 'goodnight'; // エラー吐かない

  // 両方の変数がコンソールに出力されてしまう!
  console.log(x);
  console.log(y);
})();

参考