最新のWeb開発のチュートリアル
×

JS チュートリアル

JS HOME JS 導入 JS どこへ JS 輸出 JS 構文 JS ステートメント JS 注釈 JS 変数 JS 演算子 JS 算術 JS 割り当て JS データの種類 JS 機能 JS オブジェクト JS 範囲 JS イベント JS ストリング JS 文字列メソッド JS 数字 JS 数のメソッド JS 数学 JS 日付 JS 日付形式 JS 日付の方法 JS 配列 JS アレイ方式 JS ブール値 JS 比較 JS 条件 JS スイッチ JS ループ For JS ループしながら JS ブレーク JS 型変換 JS 正規表現 JS エラー JS デバッギング JS 巻き上げ JS strictモード JS スタイルガイド JS ベストプラクティス JS 間違い JS パフォーマンス JS 予約語 JS JSON

JS フォーム

フォームバリデーション フォームAPI

JS オブジェクト

オブジェクト定義 オブジェクトのプロパティ オブジェクトメソッド オブジェクトプロトタイプ

JS 機能

関数定義 ファンクションのパラメータ 関数の呼び出し 関数クロージャ

JS HTML DOM

DOM イントロ DOM メソッド DOM 資料 DOM 要素 DOM HTML DOM CSS DOM アニメーション DOM イベント DOM EventListener DOM ナビゲーション DOM ノード DOM ノードリスト

JS ブラウザ BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS

JS 例 JS HTML DOM JS HTML 入力 JS HTML オブジェクト JS HTML イベント JS ブラウザ JS クイズ JS 概要

JS リファレンスマニュアル

JavaScript オブジェクト HTML DOM オブジェクト


 

JavaScript厳格な使用


"use strict"; JavaScriptコードが「strictモード」で実行されるべきであることを定義します。


"use strict"指令を

"use strict"ディレクティブをJavaScriptの1.8.5で新しく追加された(ECMAScript version 5)

これは、ステートメントが、JavaScriptの以前のバージョンでは無視リテラル式、ではありません。

目的"use strict"コードが「strictモード」で実行されるべきであることを示すためです。

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

strictモードがでサポートされています。
バージョン10からのFirefoxバージョン4からIE。
Chromeバージョン13からSafariバージョン5.1から。
Operaバージョン12から。


strictモードを宣言

strictモードを追加することによって宣言され"use strict";スクリプトまたは関数の先頭に。

スクリプトの先頭で宣言し、それは(スクリプト内のすべてのコードがstrictモードで実行されます)グローバルスコープを持っています。

"use strict";
x = 3.14;       // This will cause an error (x is not defined)
»それを自分で試してみてください

"use strict";
myFunction();

function myFunction() {
    y = 3.14;   // This will also cause an error (y is not defined)
}
»それを自分で試してみてください

関数内で宣言され、それは(関数内のコードのみがstrictモードである)ローカルスコープを持っています。

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

function myFunction() {
   "use strict";
    y = 3.14;   // This will cause an error (y is not defined)
}
»それを自分で試してみてください

"use strict";構文

構文は、strictモードを宣言するためには、JavaScriptの旧バージョンと互換性を持つように設計されました。

または文字列リテラル、数値リテラル(4 + 5)のコンパイル("John Doe";) JavaScriptプログラムでは、副作用を持ちません。 それは単に非既存の変数にコンパイルし、死にます。

だから、 "use strict" 。 それだけの意味を「理解」の新しいコンパイラに重要。


なぜ厳格なモード?

strictモードでは、それが簡単にJavaScriptを「セキュア」書くことができます。

strictモードの変更は、以前に実際のエラーに「不正な構文」を受け入れました。

例として、通常のJavaScriptでは、変数名をタイプミスすると、新しいグローバル変数を作成します。 strictモードでは、これは不可能誤ってグローバル変数を作成すること、エラーがスローされます。

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

strictモードでは、非書き込み可能なプロパティへの割り当て、ゲッター専用のプロパティ、非既存のプロパティ、非既存の変数、または非既存のオブジェクトは、エラーがスローされます。


strictモードで許可されていません

それを宣言せずに、変数を使用して、許可されていません。

"use strict";
x = 3.14;                // This will cause an error (x is not defined)

»それを自分で試してみてください

オブジェクトはあまりにも変数です。

それを宣言せずに、オブジェクトを使用して、許可されていません。

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

»それを自分で試してみてください

変数(またはオブジェクト)を削除することはできません。

"use strict";
var 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

»それを自分で試してみてください

オクタル数値リテラルは許可されません。

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

»それを自分で試してみてください

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

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

»それを自分で試してみてください

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

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

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

»それを自分で試してみてください

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

"use strict";
var 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";
var eval = 3.14;         // This will cause an error

»それを自分で試してみてください

文字列 "引数は"変数として使用することはできません。

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

»それを自分で試してみてください

ステートメントで許可されていません。

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

»それを自分で試してみてください

セキュリティ上の理由から、 eval()が呼び出されたスコープ内の変数を作成することはできません。

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

»それを自分で試してみてください

以下のような関数呼び出しではf()この値は、グローバルな目的でした。 strictモードでは、それは今定義されていません。


将来の証明!

今後の予約済みキーワードは、strictモードでは使用できません。 これらは:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // This will cause an error

»それを自分で試してみてください


気を付けて!

気を付けて!

"use strict"ディレクティブがのみスクリプトまたは関数の先頭に認識されています。