長い間、JavaScriptは互換性の問題なしに進化していました。新しい機能は言語に追加されましたが、古い機能は変更されませんでした。
それは既存のコードが決して壊れないというメリットがありました。しかし、欠点はJavaScript作成者による間違いや不十分な決定がこの言語から抜け出せなくなったことです。
ECMAScript 5(ES5) が登場したときは2009年でした。新しい機能が言語に追加され、既存の機能のいくつかが修正されました。古いコードが動作するのを保つために、ほとんどの修正はデフォルトではOFFです。特別なディレクティブ "use strict"
を明示的に有効にする必要があります。
“use strict”
そのディレクティブは文字列のように見えます: "use strict"
もしくは 'use strict'
。 これがスクリプトの先頭に位置する場合、すべてのスクリプトは “最新の” 方法で動作します。
例えば
"use strict";
// このコードはモダンな方法で動作します。
...
私たちはこの後まもなく関数(コマンドをグループ化する方法)を学ぶのでここで言及しますが、"use strict"
は関数の頭に置くことができることに留意してください。
この場合はその関数内でのみStrictモードが有効になります。しかし通常はスクリプト全体に対して使います。
"use strict"
がスクリプトの先頭にあるようにしてください。そうでない場合 strict mode が有効でないかもしれません。
これは strict mode ではありません:
alert("some code");
// 下の "use strict" は無視されます, 先頭にある必要があります
"use strict";
// strict mode はアクティブになりません
コメントだけは "use strict"
の上に置けます。
use strict
をキャンセルする方法はありません"no use strict"
または同系の古い振る舞いを返すようなディレクティブはありません。
一度 strict mode に入ったら戻ることはありません。
ブラウザコンソール
実行コードに対して開発者コンソールを使用する場合、デフォルトでは use strict
ではないことに留意してください。
use strict
が差異を生むと、正しくない結果が得られる可能性があります。
ではどうやってコンソールで use strict
を使うのでしょうか。
最初に、複数行入力するために Shift+Enter を押して、次のように use strict
を置きます。
'use strict'; <Shift+Enter で改行>
// ...コードを書く
<Enter で実行>
多くのブラウザ、すなわち Firefox や Chrome では動作します。
もし古いブラウザなどでそれができない場合、いまいちではありますが use strict
を確実にするための信頼できる方法があります。ラッパーの中に置きます:
(function() {
'use strict';
// ...your code here...
})()
“use strict” は必要?
この質問は明白かもしれませんが、そうではありません。
"use strict"
でスクリプトを開始することをオススメします…が何がよいか知っているでしょうか?
モダンな JavaScript は “クラス” や “モジュール” — 高度な言語構造をサポートしており、これらは use strict
を自動的に有効にします。したがって、それらを利用する場合、"use strict"
を追加する必要はありません。
なので、今のところ "use strict";
はスクリプトの先頭に書くことを推奨します。後でコードがすべてクラスとモジュールに含まれている場合は省略できます。
現段階では、use strict
について一般的なことを知っていれば十分です
次のチャプターでは、言語の機能を学びながら strict モードと 古いモードの違いについて説明します。幸い、それほど多くありません。そしてそれらは実際に我々の開発をより良くします。
常に "use strict"
で始まるスクリプトは推奨されます。このチュートリアルのすべての例は、そうでないと明示されていない限り(ほとんどないですが)それを想定しています。