Strictモードを有効にする

JavaScript では文法的にエラーではないのですが、あまり推奨されない記述方法があります。例えば変数宣言を行わずに変数に値を代入することなどです。 JavaScript で用意されている strict モードを有効にすると、このようなあまり望ましくない記述方法を行うとエラーにすることができます。ここでは JavaScript にて strict モードを有効にする方法について解説します。

(Last modified: )

strictモードを有効にする

JavaScript で strict モードはプログラム全体に対して適用することと、特定の関数に対してだけ適用することができます。プログラム全体に対して適用する場合には、プログラムの先頭に次のように記述してください。

'use strict';
・・・
・・・

※ ダブルクォーテーションで "use strict"; でも構いません。

特定の関数にだけ適用する場合は、関数のブロックの一番最初に同じように記述してください。

function myFunc(){
  'use strict';
  ・・・
  ・・・
}

関数に対して strict モードを適用した場合は、関数のブロック内だけが strict モードの対象となります。

strictモードではどのような記述方法がエラーとなるのか

実際にどのような記述方法を行うと strict モードではエラーとなるのかについて一部をご紹介します。

変数宣言を行っていない変数へ値を代入する

JavaScript では変数宣言を行ったいない変数に対しても値を代入することができます。その為、変数のスペルミスなどがあった場合にもエラーとはならず新しいグローバル変数として扱われてしまいます。

let myage;
myoge = 20;  // スペルミスした場合でもエラーにはなりません

strict モードが有効になっている場合、変数宣言をしていない変数へは値を代入できなくなります。

'use strict';

let myage;
myoge = 20;
>> Uncaught ReferenceError: myoge is not defined

関数定義での引数名が重複している

関数を定義するときに、引数として記述する変数名が重複していてもエラーとはなりませんでした。

function test(a, a, b){
  console.log('a = ' + a);
  console.log('b = ' + b);
}

test(1, 2, 3);
>> a = 2
>> b = 3

引数名が重複している場合、後に記述した引数のほうが有効となります。ただ意図してこのように記述する理由はないので、引数名が重複している場合は記述ミスの可能性が高いと思われます。

strict モードが有効になっている場合、関数で同じ引数名が記述されてるとエラーになります。

'use strict';

function test(a, a, b){
  console.log('a = ' + a);
  console.log('b = ' + b);
}

>> Uncaught SyntaxError: Duplicate parameter name not allowed in this context

8進数の記述に0xxx形式を使う

現在は 8 進数を記述する場合に 0oxxx の形式が用意されていますが、それより以前に使われていた 0xxx の形式でも 8 進数として扱われます。

let num = 0164;

console.log(num);
>> 116

strict モードが有効になっている場合、 0xxx 形式で数値を記述するとエラーになります。

'use strict';

let num = 0164;

>> Uncaught SyntaxError: Octal literals are not allowed in strict mode.

with文の使用

with 文を使用すると同じオブジェクトに対して何度もメソッドを呼び出したりプロパティを参照するようなケースでオブジェクト名を省略することができます。

with(Math){
  console.log(min(10,20,30));
  console.log(max(10,20,30));
  console.log(pow(4, 2));
}

>> 10
>> 30
>> 16

このサンプルでは本来 Math.min Math.max Math.pow と書くべきところを、 with 文を使って Math を省略して記述しています。

ただ with 文はどのオブジェクトが省略して記述されているのか分かりにくく、速度的にも問題があることなどから利用が推奨されていません。strict モードが有効になっている場合、 with 文を記述するとエラーとなります。

'use strict';

with(Math){
  console.log(min(10,20,30));
  console.log(max(10,20,30));
  console.log(pow(4, 2));
}

>> Uncaught SyntaxError: Strict mode code may not include a with statement

strict モードが有効になっている場合にどのような記述が許可されなくなるのか、一部についてご紹介しました。 strict モードを使って記述することでミスが起きにくくなりますが、既存のプログラムに適用した場合、プログラムが動作しなくなる可能性もありますのでご注意ください。

-- --

JavaScript にて strict モードを有効にする方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。