JSチュートリアル

JSホーム JSの紹介 JSどこへ JS出力 JSステートメント JS構文 JSコメント JS変数 JS Let JSConst JSオペレーター JS算術 JS割り当て JSデータ型 JS関数 JSオブジェクト JSイベント JS文字列 JS文字列メソッド JS文字列検索 JS文字列テンプレート JS番号 JS番号メソッド JSアレイ JS配列メソッド JS配列ソート JSアレイの反復 JSアレイ定数 JSの日付 JSの日付形式 JS DateGetメソッド JS日付設定メソッド JS数学 JSランダム JSブール値 JSの比較 JS条件 JSスイッチ JSループFor JSループフォーイン JSループの JSループWhile JSブレイク JSIterables JSセット JSマップ JS Typeof JS型変換 JSビット単位 JS RegExp JSエラー JSスコープ JSホイスト JS厳密モード JSこのキーワード JSアロー関数 JSクラス JS JSON JSデバッグ JSスタイルガイド JSのベストプラクティス JSの間違い JSパフォーマンス JS予約語

JSバージョン

JSバージョン JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE /エッジ JSの歴史

JSオブジェクト

オブジェクト定義 オブジェクトのプロパティ オブジェクトメソッド オブジェクト表示 オブジェクトアクセサー オブジェクトコンストラクター オブジェクトのプロトタイプ オブジェクト反復可能 オブジェクトセット オブジェクトマップ オブジェクトリファレンス

JS関数

関数の定義 関数パラメーター 関数の呼び出し 関数呼び出し 機能適用 関数クロージャ

JSクラス

クラスイントロ クラス継承 クラス静的

JS非同期

JSコールバック JS非同期 JSの約束 JS Async / Await

JS HTML DOM

DOMイントロ DOMメソッド DOMドキュメント DOM要素 DOM HTML DOMフォーム DOM CSS DOMアニメーション DOMイベント DOMイベントリスナー DOMナビゲーション DOMノード DOMコレクション DOMノードリスト

JSブラウザBOM

JSウィンドウ JS画面 JSロケーション JSの歴史 JSナビゲーター JSポップアップアラート JSタイミング JSクッキー

JS Web API

WebAPIイントロ WebフォームAPI Web履歴API WebストレージAPI WebワーカーAPI Web Fetch API Web Geolocation API

JS AJAX

AJAXイントロ AJAX XMLHttp AJAXリクエスト AJAX応答 AJAXXMLファイル AJAX PHP AJAX ASP AJAXデータベース AJAXアプリケーション AJAXの例

JS JSON

JSONイントロ JSON構文 JSONとXML JSONデータ型 JSON解析 JSON文字列化 JSONオブジェクト JSON配列 JSONサーバー JSON PHP JSON HTML JSON JSONP

JSとjQuery

jQueryセレクター jQuery HTML jQuery CSS jQuery DOM

JSグラフィックス

JSグラフィックス JSキャンバス JSPlotly JS Chart.js JSグーグルチャート JS D3.js

JSの例

JSの例 JS HTML DOM JSHTML入力 JSHTMLオブジェクト JSHTMLイベント JSブラウザ JSエディター JS演習 JSクイズ JS証明書

JSリファレンス

JavaScriptオブジェクト HTMLDOMオブジェクト


JavaScript Use Strict


"use strict";JavaScriptコードを「厳密モード」で実行する必要があることを定義します。


「厳密な使用」指令

この"use strict"ディレクティブは、ECMAScriptバージョン5で新しく追加されました。

これはステートメントではなく、以前のバージョンのJavaScriptでは無視されていたリテラル式です。

の目的は"use strict"、コードを「厳密モード」で実行する必要があることを示すことです。

strictモードでは、たとえば、宣言されていない変数を使用することはできません。

Internet Explorer 9以下を除き、最新のブラウザはすべて「厳密に使用」をサポートしています。

Directive
"use strict" 13.0 10.0 4.0 6.0 12.1

表の数字は、ディレクティブを完全にサポートする最初のブラウザーバージョンを示しています。

すべてのプログラムで厳密モードを使用できます。宣言されていない変数を使用できないようにするなど、よりクリーンなコードを作成するのに役立ちます。

"use strict" は単なる文字列であるため、IE9はそれを理解していなくてもエラーをスローしません。


厳密モードの宣言

厳密モードは、「usestrict」を追加することで宣言されます。スクリプトまたは関数の先頭まで。

スクリプトの先頭で宣言され、グローバルスコープがあります(スクリプト内のすべてのコードは厳密モードで実行されます)。

"use strict";
x = 3.14;       // This will cause an error because x is not declared

"use strict";
myFunction();

function myFunction() {
  y = 3.14;   // This will also cause an error because y is not declared
}

関数内で宣言され、ローカルスコープがあります(関数内のコードのみが厳密モードになっています)。

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
  "use strict";
  y = 3.14;   // This will cause an error
}


「厳密に使用する」; 構文

厳密モードを宣言するための構文は、古いバージョンのJavaScriptと互換性があるように設計されています。

JavaScriptプログラムで数値リテラル(4 + 5;)または文字列リテラル( "John Doe";)をコンパイルしても、副作用はありません。それは単に存在しない変数にコンパイルされて死にます。

したがって"use strict";、その意味を「理解」する新しいコンパイラにとってのみ重要です。


なぜ厳密モードなのか?

厳密モードを使用すると、「安全な」JavaScriptを簡単に作成できます。

厳密モードでは、以前に受け入れられていた「不正な構文」が実際のエラーに変更されます。

例として、通常のJavaScriptでは、変数名を誤って入力すると、新しいグローバル変数が作成されます。厳密モードでは、これによりエラーがスローされ、誤ってグローバル変数を作成することはできなくなります。

通常のJavaScriptでは、開発者は書き込み不可能なプロパティに値を割り当てるエラーフィードバックを受け取りません。

厳密モードでは、書き込み不可のプロパティ、ゲッターのみのプロパティ、存在しないプロパティ、存在しない変数、または存在しないオブジェクトへの割り当てはエラーをスローします。


厳密モードでは許可されていません

変数を宣言せずに使用することは許可されていません。

"use strict";
x = 3.14;                // This will cause an error

オブジェクトも変数です。

オブジェクトを宣言せずに使用することは許可されていません。

"use strict";
x = {p1:10, p2:20};      // This will cause an error

変数(またはオブジェクト)の削除は許可されていません。

"use strict";
let x = 3.14;
delete x;                // This will cause an error

関数を削除することはできません。

"use strict";
function x(p1, p2) {};
delete x;                // This will cause an error 

パラメータ名を複製することは許可されていません。

"use strict";
function x(p1, p1) {};   // This will cause an error

8進数のリテラルは使用できません。

"use strict";
let x = 010;             // This will cause an error

8進数のエスケープ文字は使用できません。

"use strict";
let x = "\010";            // This will cause an error

読み取り専用プロパティへの書き込みは許可されていません。

"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

get-onlyプロパティへの書き込みは許可されていません。

"use strict";
const obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

削除できないプロパティを削除することはできません。

"use strict";
delete Object.prototype; // This will cause an error

この単語evalを変数として使用することはできません。

"use strict";
let eval = 3.14;         // This will cause an error

この単語argumentsを変数として使用することはできません。

"use strict";
let arguments = 3.14;    // This will cause an error

withステートメントは許可されていません

"use strict";
with (Math){x = cos(2)}; // This will cause an error

セキュリティ上の理由から、eval()呼び出し元のスコープに変数を作成することは許可されていません。

"use strict";
eval ("let x = 2");
alert (x);             // This will cause an error

関数のthisキーワードは、厳密モードでは動作が異なります。

thisキーワードは、関数を呼び出したオブジェクトを参照します

オブジェクトが指定されていない場合、厳密モードのundefined関数は戻り、通常モードの関数はグローバルオブジェクト(ウィンドウ)を返します。

"use strict";
function myFunction() {
  alert(this); // will alert "undefined"
}
myFunction();


将来の保証!

将来のJavaScriptバージョン用に予約されているキーワードは、厳密モードでは変数名として使用できません。

これらは:

  • 実装
  • インターフェース
  • させて
  • パッケージ
  • 民間
  • 保護
  • 公衆
  • 静的
  • 収率
"use strict";
let public = 1500;      // This will cause an error

気を付けて!

「usestrict」ディレクティブは、スクリプトまたは関数の先頭でのみ認識されます。