JavaScript strictモードの概要 strictを使用する

JavaScript strictモードの概要 strictを使用する

1. 概要

1.1 厳密モードとは何ですか?

厳密モードは、 JavaScriptのより制限の厳しいバージョンです。厳密モードはJavaScriptのサブセットではなく、通常のコードとは意味的に異なります。

現在、ほとんどのブラウザは厳格モードをサポートしていますが、一部の古いバージョンのブラウザはまだ厳格モードをサポートしていないため、厳格モードの機能をテストせずに厳格モードを使用しないでください。

JavaScriptでは厳密モードと非厳密モードが共存できるため、厳密モードをスクリプトに選択的に追加できます。

1.2 厳密モードの目的

厳密モードを使用する目的は次のとおりです。

まず、厳密モードでは、 JavaScript落とし穴が明らかなエラーに変換されます。
次に、厳密モードでは、エンジンが最適化するのが難しいいくつかのエラーが修正されます。同じコードでも、厳密モードの方が非厳密モードよりも高速になる場合があります。
厳密モードでは、将来のバージョンで定義される可能性のある一部の構文が無効になります。

2. 厳密モードを有効にする

JavaScriptで厳格モードを有効にするには、グローバルに厳格モードを有効にする方法と、ローカルに厳格モードを有効にする方法の 2 つがあります。

2.1 厳格モードをグローバルに有効にする

グローバル厳格モードを有効にするには、すべてのコードの前に文字列を入力するだけです。文字列は次のとおりです。

"use strict"; // または 'use strict';


前のJavaScriptコードが非厳格モードの場合、問題が発生する可能性があるため、このコードに対して厳格モードを有効にしないことをお勧めします。まずローカルで厳密モードを有効にし、コードを段階的に調整することをお勧めします。

2.2 ローカルで厳密モードを有効にする

ローカルで厳密モードを有効にするには、指定した関数の最初の行に文字列「 use strict 」を追加します。この文字列により、関数は非厳密モードのままになります。

厳密モードを有効にするサンプルコードは次のとおりです。

//厳密モードをグローバルに有効にする //"use strict"
100 です
コンソールログ(v)

関数fun() {
  // ローカルで厳密モードを有効にする 'use strict'
  200 です
  コンソールログ(vv)
}
// fun() は例外をスローします vv は定義されていません

3. 厳密モードの変数

3.1 変数の偶発的な作成を防ぐ

いわゆる誤って作成された変数は、var キーワードを使用せずに宣言された変数です。厳密モードでは、グローバル変数が誤って作成されると例外がスローされます。

サンプルコードは次のとおりです。

「厳密な使用」
// 非厳密モードでは、このような変数を作成してもエラーは報告されませんが、厳密モードでは、このような変数を作成すると例外がスローされます v = 100
コンソールログ(v)


3.2 サイレント失敗が例外に変わる

サイレント失敗はエラーも影響もないことを意味します。厳密モードでは例外に変換されます。

3.3 削除キーワードを無効にする

非厳密モードでは、グローバル変数でdeleteキーワードを使用すると何も表示されずに失敗しますが、厳密モードでは例外がスローされます。サンプルコードは次のとおりです。

「厳密な使用」
変数v = 100
delete v // SyntaxError: Deleteofanunqualifiedidentifierinstrictmode.
コンソールログ(v)


3.4 変数名の制限

厳密モードでは、 JavaScript変数名にも制限があります。特に、予約語は変数名として使用できません。予約語をシンボルとして変数名として使用すると、構文エラーが発生します。

4. 厳密モードのオブジェクト

4.1 削除できない属性

非厳密モードでは、削除できないプロパティでdeleteキーワードを使用すると暗黙的に失敗しますが、厳密モードでは例外がスローされます。

サンプルコードは次のとおりです。

「厳密な使用」
delete Object.prototype; //例外をスローする

4.2 読み取り専用プロパティの割り当て

非厳密モードでは、読み取り専用プロパティに値を割り当てると何も表示されずに失敗しますが、厳密モードでは例外がスローされます。サンプル コードは次のとおりです。

「厳密な使用」

var obj = {}
オブジェクト.defineProperty(obj, 'name', {
  価値: 「お粥一杯」
})
obj.name = 'Yiwan Zhou' //例外をスローします

4.3 拡張不可能なオブジェクト

拡張不可能なオブジェクトに新しいプロパティを追加すると、非厳密モードでは何も表示されずに失敗しますが、厳密モードでは例外がスローされます。

サンプルコードは次のとおりです。

// グローバル厳格モードを有効にする 'use strict'
var obj = {}
//拡張不可にする Object.preventExtensions(obj)
//オブジェクト属性を拡張します。obj.name = 'Yiwan Zhou' //例外をスローします

5. 厳密モードでの機能

5.1 パラメータ名は一意でなければならない

非厳密モードでは関数パラメータを繰り返すことができますが、厳密モードでは関数パラメータが繰り返されると例外がスローされます。サンプルコードは次のとおりです。

「厳密な使用」

関数fun(a, a, b) {
  コンソールログ(a + a + b)
}
/*
 *非厳密モードでの結果は7=2+2+3です
 *厳密モードでは例外がスローされます*/
楽しい(1, 2, 3)


5.2 議論の相違

argumentsオブジェクトは、厳密モードと非厳密モードで異なる動作をします。

違いは次のとおりです。

  • 非厳密モードでは、実際のパラメータ値の変更はargumentsオブジェクトにも反映されます。
  • 厳密モードでは、名前付きパラメータは ' arguments'オブジェクトから完全に分離されます。

サンプルコードは次のとおりです。

「厳密な使用」

関数fun(v) {
  '100' の場合
  コンソールログ(v)
  コンソール.log(引数[0])
}
/*
 * 非厳密モードで印刷された結果は100、100
 *厳密モードで印刷された結果は100、200です
 */
楽しい(200)


5.3 arguments.callee プロパティ

非厳密モードでは、現在の関数名を返すarguments.calleeプロパティを使用できます。厳密モードでは、このプロパティを使用すると例外がスローされます。

サンプルコードは次のとおりです。

「厳密な使用」

関数fun(){
console.log(引数.呼び出し先);
}
fun()//例外をスローする

5.4 関数宣言の制限

厳密モードでは、関数はグローバル スコープとローカル スコープでのみ宣言できます。これらの 2 つのスコープの外部 (if ステートメント ブロックなど) で関数構文を宣言するとエラーになります。

サンプルコードは次のとおりです。

「厳密な使用」

関数fun() {
  console.log(引数.呼び出し先)
}
fun() //例外をスローする

6. eval() のスコープを拡大する

厳密モードでは、 eval()関数で作成された変数は関数内でのみ使用できます。

外部で使用すると例外がスローされます。サンプルコードは次のとおりです。

「厳密な使用」
評価('var v=100')
console.log(v) //例外をスローする

7. これを抑制する

Fucntionapply()またはcall()メソッドを非厳密モードで使用すると、 nullまたはundefined値はグローバル オブジェクトに変換されます。厳密モードでは、関数のthis値は常に指定された値になります。

サンプルコードは次のとおりです。

// 厳密モードを有効にする 'use strict'

変数v = 100

関数fn() {
  コンソールログ(this.v)
}

var obj = {
  v: 200,
}

fn.call(obj) //これはグローバルオブジェクトを指します

結論:

この記事では基本的に、厳格モードのすべての状況を紹介しており、日常の開発における厳格モードに関連する問題を解決するのに十分です。

これで、 JavaScript strict mode use strictに関するこの記事は終了です。JavaScript strict mode use strict の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript strict モード (use strict) の使用例の分析
  • Javascript strictモードの使用 strict の詳細な説明

<<:  dockerfile-maven-plugin 使用ガイドの概要

>>:  適応幅(パーセンテージ)に応じて Div の高さを調整する純粋な CSS

推薦する

jQuery はテーブルのページング効果を実装します

この記事では、テーブルのページング効果を実現するためのjQueryの具体的なコードを参考までに紹介し...

JavaベースのMySQLバックアップテーブル操作

コアはmysqldumpとランタイムです操作は実際にはそれほど難しくありません。バックアップ操作を実...

Vue3 (パート 2) Ant Design Vue の統合

目次1. Ant Design Vueを統合する2. コンポーネントの使用1. 完全な引用2. コン...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

Vue3 親子コンポーネントパラメータ転送における sync 修飾子の使用法の詳細な説明

目次一方向データフローの説明Vue2.x の使用法親コンポーネントに変更を通知するイベントのフォーム...

JavaScript のクロージャの詳細な説明

導入クロージャは JavaScript の非常に強力な機能です。いわゆるクロージャは関数内の関数です...

CnBlogs カスタムブログスタイルの共有

半夜かけてようやくブログのスタイルを大体完成させることができました。ブログ全体が青を基調としていて、...

CSS のフィルター属性とバックドロップフィルターの適用と違いの詳細な説明

フィルターとバックドロップフィルターにはいくつかの違いがあります。フィルターは現在の要素だけでなく、...

Maxwell を使用して MySQL データをリアルタイムで同期する方法

目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...

MySQL フェイルオーバー ノート: アプリケーション対応設計の詳細な説明

1. はじめに周知のように、データベース ミドルウェアの読み取り/書き込み分離のアプリケーション シ...

Centos7 での NFS サービス構築の紹介

目次1. サーバー2. クライアント3. テストサービス1. サーバー1. YUMソースを使用してN...

ページのレンダリング時間を短縮してページの実行速度を速めます

ブラウザでのページのレンダリング時間をできるだけ短縮するにはどうすればよいでしょうか? この記事は、...

重複データの処理に関するMySQL学習ノート

MySQLは重複データを処理します一部の MySQL テーブルには重複レコードが含まれている場合があ...

DockerコンテナでのMySQLデータのインポート/エクスポートの詳細な説明

序文MySQL データのインポートとエクスポートは mysqldump コマンドで解決できることは誰...

JavaScriptはブラウザがIEかどうかを判定します

フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...