2020年5月19日

モダンモード、"use strict"

長い間、JavaScriptは互換性の問題なしに進化してきました。古い機能は変更されることなく、新しい機能が言語に追加されました。

これは、既存のコードを壊すことがないという利点がありました。しかし、欠点は、JavaScriptの作成者による間違いや不完全な決定が言語に永遠に残ってしまうことでした。

ECMAScript 5 (ES5) が登場した2009年まで、このような状況が続いていました。ES5は言語に新しい機能を追加し、既存の機能の一部を変更しました。古いコードを動作させ続けるために、そのような変更のほとんどはデフォルトでオフになっています。特別なディレクティブ:"use strict"を使用して明示的に有効にする必要があります。

“use strict”

ディレクティブは文字列のように見えます:"use strict" または 'use strict'。スクリプトの先頭に配置すると、スクリプト全体が「最新」の方法で動作します。

例えば

"use strict";

// this code works the modern way
...

まもなく関数(コマンドをグループ化する方法)について学ぶので、"use strict" は関数の先頭に置くことができることを事前に知っておきましょう。そうすることで、その関数内でのみ厳格モードが有効になります。しかし、通常はスクリプト全体に使用します。

“use strict” が先頭にあることを確認してください

"use strict" がスクリプトの先頭にあることを確認してください。そうでない場合、厳格モードが有効にならない可能性があります。

厳格モードはここでは有効になっていません

alert("some code");
// "use strict" below is ignored--it must be at the top

"use strict";

// strict mode is not activated

"use strict" の上にはコメントのみ表示できます。

use strict をキャンセルする方法はありません

エンジンを古い動作に戻す "no use strict" のようなディレクティブはありません。

一度厳格モードに入ると、戻ることはできません。

ブラウザコンソール

開発者コンソールを使用してコードを実行する場合、デフォルトでは use strict が使用されないことに注意してください。

場合によっては、use strict が違いを生むと、正しくない結果が得られることがあります。

では、実際にコンソールで use strict を使用するにはどうすればよいでしょうか?

まず、Shift+Enter を押して複数行を入力し、use strict を次のように上に配置してみてください

'use strict'; <Shift+Enter for a newline>
//  ...your code
<Enter to run>

これは、FirefoxやChromeなど、ほとんどのブラウザで動作します。

もし動作しない場合、例えば古いブラウザでは、use strict を確実に有効にするための醜いながらも信頼できる方法があります。この種のラッパーの中に配置します

(function() {
  'use strict';

  // ...your code here...
})()

“use strict” を使用する必要がありますか?

この質問は明白に聞こえるかもしれませんが、そうではありません。

スクリプトを "use strict" で始めることをお勧めする人もいるかもしれません… でも、何がすごいのか知っていますか?

最新のJavaScriptは「クラス」と「モジュール」をサポートしています。これらは高度な言語構造(必ず説明します)であり、use strict を自動的に有効にします。そのため、これらを使用する場合は、"use strict" ディレクティブを追加する必要はありません。

そのため、今のところ "use strict"; はスクリプトの先頭に歓迎されるゲストです。後で、コードがすべてクラスとモジュールになったら、省略しても構いません。

今のところ、use strict について概ね理解しました。

次の章では、言語機能を学ぶにつれて、厳格モードと古いモードの違いを見ていきます。幸いなことに、違いは多くなく、実際には私たちの生活をより良くしてくれます。

このチュートリアルのすべての例では、特に明記されていない限り(ごくまれですが)、厳格モードを想定しています。

チュートリアルマップ

コメント

コメントする前にこれを読んでください…
  • 改善すべき点についての提案がある場合は、コメントする代わりに、GitHubのissueを送信するか、プルリクエストを送信してください。
  • 記事の内容が理解できない場合は、詳しく説明してください。
  • 数語のコードを挿入するには、<code> タグを使用し、複数行の場合は <pre> タグで囲み、10行を超える場合はサンドボックス(plnkrjsbincodepen…)を使用してください。