この記事はHuaweiCloudCommunityから共有されています「JS/TSの「厳密な使用」厳密モードとは何ですか?、gentle_zhouによる。
毎日のJS/TSプロジェクト開発プロセスで"use strcit"
は、ファイルの先頭に単語がよく表示されますが、ここで「厳密に使用する」とはどういう意味ですか?
文字通り説明すると、このプロジェクトファイルは厳しい条件で実行されます。では、厳しい条件は何ですか?なぜ厳しい条件が必要なのですか?
この記事のナビゲーション:厳密モードとは何ですか;なぜ厳密モードが必要なのですか;厳密モード制限の例;参照リンク
ストリクトモードとは
"use strcit"
JavaScript 1.8.5(ECMAScript5)バージョンで追加されました:
"use strcit"
ステートメントではなく、通常のコードとは異なる意味を持つ宣言です"use strcit"
。スクリプトまたは関数の先頭に式を追加することにより、厳密モードの使用を宣言します。strictモードの意味により、プロジェクト内のコードを厳密な条件下で実行できるようになります。これにより、一部の悪いコーディング習慣が制限され、コーディング段階で問題が発生する可能性があります。
厳密モードをサポートするブラウザは、Internet Explorer 10以降、Firefox 4以降、Chrome 13以降、Safari 5.1以降、Opera12以降です。
ブラウザでエラーメッセージを表示するにはどうすればよいですか?F12ボタンを押すか、ブラウザページの右上隅にある3つのドットをクリックします-その他のツール-デバッグモードを有効にする開発者ツール:
次に、コンソールタブをクリックして、エラーメッセージを表示します。
なぜ厳密モードが必要なのですか
strictモードの反対のモードはsloppyモードです。これは、名前からわかるように、コードの記述プロセスへの応答においてカジュアルでずさんなものです。sloppyモードは正式な名前ではありません。厳密なモードで宣言しない限り、js/tsファイルはsloppyモードになります。
では、なぜ、ずさんなモードではなく、厳密なモード(追加の宣言を含む)を直接使用するのでしょうか。
厳密モードは、JS / TS構文の不合理で不正確な場所を排除し、JS / TSをより合理的で、より安全で、より厳密な方向に発展させることができます。
- JS / TSのサイレントエラーの一部をスローエラーに変更することで、JS / TSのサイレントエラーの一部が排除され、コード操作のセキュリティがより効果的に保証されます。
- コンパイラの効率を改善し、実行速度を上げます。
- ECMAScriptの将来のバージョンで定義される可能性のある一部の構文は禁止されています。
サイレントエラーの一部は、以下の「厳密なモード制限の例」セクションに示されています。
厳密モードの制限された例
- 宣言されていない変数は許可されていません
デバッグモードでは、「Uncaught ReferenceError: x is not defined
」と表示されます。
正しい式は次のようになります。let x = 520;
- 変数またはオブジェクトの削除は許可されていません
Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
「 」はデバッグモードで表示されます - 削除機能は許可されていません
Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
「 」はデバッグモードで表示されます - 変数名は許可されていません
Uncaught SyntaxError: Duplicate parameter name not allowed in this context.
「 」はデバッグモードで表示されます - 8進数は許可されていません
Uncaught SyntaxError: Octal literals are not allowed in strict mode.
「 」はデバッグモードで表示されます - エスケープ文字は使用できません
Uncaught SyntaxError: Invalid or unexpected token.
「 」はデバッグモードで表示されます - 読み取り専用プロパティへの割り当ては許可されていません
Uncaught TypeError: Cannot assign to read only property 'x' of object '#<Object>'.
「 」はデバッグモードで表示されます - getterメソッドを使用して読み取られたプロパティへの割り当ては許可されていません
Uncaught TypeError: Cannot set property x of #<Object> which has only a getter.
「 」はデバッグモードで表示されます - 削除が許可されていない属性を削除することはできません
Uncaught TypeError: Cannot delete property 'prototype' of function Object() { [native code] }.
「 」はデバッグモードで表示されます - 変数名は「eval」文字列/「arguments」文字列を使用できません
Uncaught SyntaxError: Unexpected eval or arguments in strict mode.
「 」はデバッグモードで表示されます - 次のようなステートメントは許可されていません
Uncaught SyntaxError: Strict mode code may not include a with statement.
「 」はデバッグモードで表示されます - セキュリティ上の理由から、スコープeval()で作成された変数を呼び出すことはできません
Uncaught ReferenceError: x is not defined.
「 」はデバッグモードで表示されます
同時に、将来的に新しいバージョンのJavascriptに移行するために、strictモードではいくつかの予約済みキーワードが追加されます。
- 実装
- インターフェース
- させて
- パッケージ
- プライベート
- 保護
- 公衆
- 静的
- 収率
たとえば、変数名が予約済みキーワードの1つである場合'public'
、エラー「Uncaught SyntaxError: Unexpected strict mode reserved word
」が報告されます。
参照リンク
- http://www-lia.deis.unibo.it/materiale/JS/developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.8-2.html
- https://developer.mozilla.org/en-US/docs/web/javascript/reference/strict_mode
- https://developer.mozilla.org/en-US/docs/Glossary/Sloppy_mode
- https://www.runoob.com/js/js-strict.html