Strict モードは、通常はエラーとはせず見逃していたプログラミング上の省略をエラーにするなど、より厳格に振る舞うモードです。 Strict モードは、ECMAScript 2009 = ES5 で導入されました[1]

概要

編集

Strict モードはスクリプト全体あるいは、個別の関数に適用できます(var 宣言された変数のスコープと似ていますね)。

スクリプト全体をStrict モードにする場合

'use strict';
var msg = "Hello strict world!";
console.log(msg);

この例では怪しい兆候がないので、Hello strict world! が表示されました。

'use strict';
msg = "Hello strict world!";
console.log(msg);

1箇所変更しました。 実行すると、ReferenceError: msg is not defined となります。 varを省略したので、(初期化を伴う)変数宣言から代入になり「define している場所がない」状況がエラーになっています。

'use strict'; をとってみます。

msg = "Hello strict world!";
console.log(msg);

Hello strict world! が表示されました。

関数単位でStrict モードにする場合

console.log(0)
function nostrict() {
  msg = "Hello nostrict function!";
  console.log(msg + 0177);
}
console.log(1)
function strict() {
  'use strict';
  msg = "Hello strict function!";
  console.log(msg + 0177);
}
console.log(2)
// SyntaxError: Octal literals are not allowed in strict mode.

console.log() による表示は全く行われないでエラーで止まります。 0に[0-7]が続く書式の八進数表現はstrictモードではエラーです。

class 定義は自動的に strict モード

編集

ES6で導入されたクラス(class)の定義の中では、自動的にstrict モードになります。

strict モードのエラー対象

編集

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。

脚註

編集
  1. ^ 初見: https://www.ecma-international.org/wp-content/uploads/ECMA-262_5th_edition_december_2009.pdf#page=61 10.1.1 Strict Mode Code、現行: https://262.ecma-international.org/#sec-strict-mode-of-ecmascript C The Strict Mode of ECMAScript
このページ「JavaScript/strictモード」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。