「厳密モード」は ECMA-262 Edition 5 で定義された新しい構文であり、これまで一般的に使用されていた一部の書き込みメソッドでは、次のような SyntaxError 例外がスローされることを意味します。 1. 変数
の前に var 宣言がありません。 2. 8 進数の構文を使用します: var n = 023 および var s = "
1. 「strict モード」を使用する理由
「strict モード」を確立する主な目的は次のとおりです。
1. Javascript 構文の不合理で不正確な部分を削除し、いくつかの奇妙な動作を削減します。
2. コード実行の安全性を確保し、コンパイラーの効率を向上させます。実行速度;
4. 将来の Javascript の新しいバージョンへの道を切り開く。
「厳密モード」は、JavaScript のより合理的で安全かつ厳密な開発方向を反映しており、IE 10 を含む主流ブラウザはすでにそれをサポートしており、多くの大規模プロジェクトがそれを全面的に採用し始めています。
この記事では「ストリクトモード」について詳しく紹介します。
2. 「厳密モード」を宣言します
「厳密モード」の宣言は、1 つのステートメントだけで非常に簡単です:
コードは次のとおりです:
"use strict";注: 古いバージョンのブラウザでは、これを通常の文字列の行として扱い、無視します。
3. 「厳密モード」を宣言する位置と文脈
コードをコピー
コードは次のとおりです:
<script><P>"use strict"; <BR>console.log("これは strict モードです。");</script>
2. 単一関数の場合
関数本体の最初の行に「use strict」と入力すると、関数全体が「strict モード」で実行されます。
コードをコピー
コードは次のとおりです:
function strict(){" use strict" ;
return "これは strict モードです。";}
function notStrict() {
3. スクリプト ファイルを記述する別の方法
最初の呼び出しメソッドはファイルのマージに適していないため、より良いアプローチは 2 番目のメソッドと全体を借用することです。スクリプト ファイルは、すぐに実行される匿名関数に配置されます。
(function (){
"use strict";
// ここにコードをいくつか示します
})();
4. 「厳密モード」での構文と動作の変更
「厳密モード」では、JavaScript の構文と動作にいくつかの変更が加えられています。
1. グローバル変数の明示的な宣言
通常モードでは、変数を使用するときに、最初に var で変数を宣言する必要はありません (明示的宣言)。しかし、Strict モードでは、変数は使用する前に var で宣言する必要があります。そうしないと、エラーが発生します。 。
"use strict";
v = 1; // エラーが報告されました、v は宣言されていません
for(i = 0; i }
したがって、 strict モードでは、変数は最初に var コマンドで宣言してから使用する必要があります。
2. 静的バインディング
JavaScript 言語の特徴は、「動的バインディング」が可能であることです。つまり、特定のプロパティやメソッドがどのオブジェクトに属するかは、コンパイル時ではなく実行時に決定されます。
厳密モードでは、動的バインディングにいくつかの制限が課されます。場合によっては、静的バインディングのみが許可されます。つまり、プロパティとメソッドがどのオブジェクトに属するかは、コンパイル段階で決定されます。これにより、コンパイル効率が向上し、コードが読みやすくなり、予期せぬ事態が少なくなります。
具体的には、次のような側面が含まれます。
(1) with ステートメント
with ステートメントでは、コンパイル時に属性がどのオブジェクトに属しているかを判断できないためです。
"use strict";
var v = 1 ;
with (o){ // 構文エラー
v = 2;
}
(2) eval スコープの作成
通常モードでは、JavaScript 言語にはグローバル スコープと関数スコープという 2 つの変数スコープがあります。厳密モードでは、3 番目のスコープである eval スコープが作成されます。
通常モードでは、eval ステートメントのスコープは、グローバル スコープにあるか関数スコープにあるかによって異なります。 strict モードでは、eval ステートメント自体がスコープとなり、グローバル変数を生成できなくなります。生成された変数は eval 内でのみ使用できます。
"use strict";
var x = 2 ;
console.info(eval("var x = 5; x")); // 5
console.info(x); // 2
3. セキュリティ対策の強化
(1) このキーワードがグローバル オブジェクトを指すことを禁止します
function f(){
return !this;
}
// "this" がグローバル オブジェクト "!this" を指しているため、false を返します。 is false
function f (){
"use strict";
return !this;
}
// strict モードでは this の値は true を返します。未定義なので、「!this」は true です。
したがって、コンストラクターを使用するときに new を追加するのを忘れると、これはグローバル オブジェクトを指さなくなり、エラーが報告されます。
function f(){
"use strict";
this.a = 1;
};
f();// エラー、これは未定義です
通常の関数呼び出し f() では、this の値はグローバル オブジェクトを指します。厳密モードでは、この関数が call および apply によって呼び出された場合、thisvalue パラメーターが指定されている場合、this の値は未定義を指します。 null と未定義を除くプリミティブ値 (文字列、数値、ブール値) の場合、thisvalue パラメータの値が未定義または null の場合、this の値はそのプリミティブ値に対応するパッケージング オブジェクトになります。 this の値はグローバル オブジェクトを指します。厳密モードでは、this の値は型変換なしの thisvalue パラメーターの値になります。
(2) 関数内の呼び出しスタックを走査することは禁止されています
function f1(){
"use strict";
f1.caller; // エラー報告
f1.arguments; // エラー報告
}
f1();
4. 変数の削除は禁止されています
厳密モードでは変数を削除できません。構成可能が true に設定されているオブジェクト属性のみを削除できます。
"use strict";
var x;
delete x; // 構文エラー
var o = Object.create(null, 'x', {
value: 1,
configurable: true
});
delete o.x ; // 削除成功
5. 明示的なエラー報告
通常モードでは、オブジェクトの読み取り専用プロパティに値を代入してもエラーは報告されませんが、警告なしに失敗します。厳密モードでは、エラーが報告されます。
"use strict";
var o = { };
Object.defineProperty(o, "v", { value: 1, writable: false });
o.v = 2; // エラー報告
厳密モードでは、メソッドによって読み取られた属性に値が割り当てられている場合、エラーが報告されます。
"use strict";
var o = {
get v() { return 1; }
};
o.v = 2; // エラーレポート
が禁止されているオブジェクトに新しい属性を追加します展開するとエラーが報告されます。
"use strict";
var o = { };
Object.preventExtensions(o);
o.v = 1; // エラー報告
厳密モードでは、削除できない属性を削除するとエラーが報告されます。
"use strict";
delete Object.prototype ; // エラーを報告します
6. 名前の重複エラー
厳密モードでは、いくつかの新しい構文エラーが追加されました。
(1) オブジェクトは重複する名前の属性を持つことはできません
通常モードでは、オブジェクトに同じ名前の複数の属性がある場合、最後に割り当てられた属性が以前の値を上書きします。厳密モードでは、これは構文エラーです。
"use strict";
var o = {
p: 1,
p: 2
} // 構文エラー
(2) 関数には重複した名前のパラメータを含めることはできません
通常モードでは、関数に同じ名前の複数のパラメーターがある場合、arguments[i] を使用してそれらを読み取ることができます。厳密モードでは、これは構文エラーです。
"use strict";
関数f(a , a, b) { // 構文エラー
return ;
}
7. 8 進表記は禁止されています
通常モードでは、整数の最初の桁が 0 の場合、それは 8 進数であることを意味します。たとえば、0100 は 10 進数の 64 に相当します。厳密モードではこの表現は禁止されており、整数の最初のビットは 0 であり、エラーが報告されます。
"use strict";
var n = 0100 ; // 構文エラー
8. 引数オブジェクト
arguments は関数のパラメータ オブジェクトであり、strict モードではその使用が制限されます。
(1) 引数への代入は許可されていません
"use strict";
arguments ; // 構文エラー
var obj = { set p(arguments) { } } // 構文エラー
try { } catch ( argument) { } // 構文エラー
function argument() { } // 構文エラー
var f = new Function("arguments", "'use strict'; return 17;"); // 構文エラー
(2) 引数はパラメーターの変更を追跡しなくなりました
function f(a) {
a = 2;
return [a, argument[0]];
}
f(1); // 通常モードは [2,2]
function f(a) {
"厳密な使用";
a = 2;
return [a, argument[0]];
}
f (1); // 厳密モードは [2,1]
(3) argument.callee の使用は禁止されています
これは、匿名関数内で自分自身を呼び出すことができないことを意味します。
"use strict";
var f = function () { return argument.callee };
f(); // エラーを報告します
9. 関数は最上位レベルで宣言する必要があります
JavaScript の新しいバージョンでは、将来「ブロックレベルのスコープ」が導入される予定です。新しいバージョンに準拠するために、厳密モードでは、グローバル スコープまたは関数スコープの最上位レベルで関数を宣言することのみが許可されます。つまり、関数以外のコード ブロック内で関数を宣言することはできません。
"use strict";
if (true) {
function f() { } // 構文エラー
}
for (var i = 0; i function f2() { } //構文エラー
}
10. 予約語
将来 JavaScript の新しいバージョンに移行するために、strict モードには新しい予約語がいくつか追加されます:implements、interface、let、package、private、protected、public、static、yield。
これらの単語を変数名として使用すると、エラーが発生します。
function package(protected) { // 構文error
"use strict";
varimplements; // 構文エラー
}
さらに、ECMAscript の 5 番目のバージョン自体も他の予約語 (class、enum、export、 extends、import、super)、および主要なブラウザで追加された const 予約語は変数名として使用できません。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
