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

推薦する

DockerにELKをインストールしてJSON形式のログ分析を実装する方法

ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...

MySQL データベースの手動およびスケジュールされたバックアップ手順

目次手動バックアップタイマーバックアップ手動バックアップ1) cmd コンソール: mysqldum...

mysql の存在する例と存在しない例の詳細な説明

mysql の存在する例と存在しない例の詳細な説明テーブルA |列1 | 列1 | 列3 |テーブル...

フロントエンドは画像を遅延ロードする方法を知っている必要があります(3つの方法)

目次1. 遅延読み込みとは何ですか? 2. 遅延読み込みを実装する🌄: 2.1 最初の方法: 2.2...

Innodb で MySQL の 2T テーブルをすばやく削除する方法の例

序文この記事は主に、MySQL の Innodb で 2T の大きなテーブルをすばやく削除する方法に...

MySQLのSeconds_Behind_Masterの詳細な説明

目次マスターの後ろの秒数オリジナルの実装最終マスタータイムスタンプマスターとのクロック差他の実行時間...

5つのCSSスクロール天井実装方法の比較(パフォーマンス向上版)

改訂版のプレビューこの記事は 3 日前に書かれたものです。先輩の同僚から改訂の提案をいくつかいただき...

Windows サービス 2012 Alibaba Cloud サーバーで MySQL をビルドするときに msvcr100.dll ファイルが見つからないという問題を解決します

解決策1: msvcr100.dll ファイルをダウンロードし (インターネットからソース ファイル...

純粋な CSS で中空効果を実現するためのサンプルコード

私は最近、空洞化効果について研究しました。背景クリップ: テキスト背景はテキストの前景色にクリップさ...

NodeJS は画像テキスト分割を実現します

この記事では、画像テキストセグメンテーションを実装するためのNodeJSの具体的なコードを参考までに...

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

Centos7 で crontab + シェル スクリプトによる定期的な自動ファイル削除の問題を解決する

問題の説明:最近、rsyncで毎回同期するデータ量が多いが、データベースのbakファイルを保持する必...

Vueはタブを切り替えてデータの状態を維持する3つの方法を実装します

Vue でタブ切り替えを実装する 3 つの方法1. v-showはコンテンツの切り替えを制御します1...

Linux システムで Java 環境変数を設定する方法

Java環境変数を設定するここで、環境変数は etc/profile に設定され、つまり、すべてのユ...

ウェブ開発者はIE7とIE8の共存を懸念している

今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...