長い間、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"
と “default” モードの違いはこの後にも説明があります。
次のチャプターでは、言語の機能を学びながら strict mode と default mode の違いについて説明します。幸い、それほど多くありません。そしてそれらは実際に我々の開発をより良くします。
現段階では、それについて一般的なことを知っていれば十分です:
"use strict"
ディレクティブは “最新” モードにエンジンを切り替え、いくつかの組み込みの機能の振る舞いを変更します。勉強しながらその詳細を見ていきましょう。- strict mode は先頭の
"use strict"
で有効になります。また、自動的に strict mode を有効にする “classes” や “modules” のようないくつかの機能もあります。 - strict mode はすべてのモダンブラウザによってサポートされています。
- 常に
"use strict"
で始まるスクリプトは推奨されます。このチュートリアルのすべての例は、そうでないと明示されていない限り(ほとんどないですが)それを想定しています。
コメント
<code>
タグを使ってください。複数行の場合は<pre>
を、10行を超える場合にはサンドボックスを使ってください(plnkr, JSBin, codepen…)。