js の strict モードについて知っておくべきことの簡単な分析
この記事の内容は、js の strict モードをマスターするために必要なものについての簡単な分析です。必要な方は参考にしていただければ幸いです。
厳密モード
まず、厳密モードとは何かを理解しましょう。
厳密モードは、サブセットではなく、JavaScript のより制限的なバリアントです。通常のコードとは意味的に大きく異なり、厳密モードをサポートしていないブラウザと厳密モードをサポートするブラウザの動作も異なるため、使用しないでください。厳密モードの機能をテストせずに厳密モード。厳密モードは非厳密モードと共存できるため、スクリプトは段階的かつ選択的に厳密モードに参加できます
厳密モードの目的
まず、厳密モードは JavaScript トラップを直接明白にします。第 2 に、厳密モードは、エンジンが最適化するのが難しいいくつかのエラーを修正します。同じコードが、非厳密モードよりも厳密モードの方が高速になる場合があります。 将来のバージョンで定義される可能性のある構文がいくつかあります
。厳密モードをグローバルに有効にする
JavaScriptで厳密モードを有効にするには、すべてのコードの前に変数に割り当てられない文字列を定義する必要があります:
'use strict';//或者"use strict"
以前のJavaScriptが非厳密モードだった場合、このコードでは、厳密モードを盲目的に有効にしないことをお勧めします。これにより、指定した関数に対して厳密モードを 1 つずつ有効にすることもできます。これは、厳密モードをグローバルにオンにする柔軟な実装と同等です
//函数外部依旧是非严格模式 function fun(){ 'user strict';//开启严格模式 }
- 厳密モードでは、グローバル変数の誤った作成は許可されていません 次の例 コードは誤ってグローバル変数を作成しています非厳密モードの変数
(function(){ 'use strict';//开启严格模式 })();
次のコード例は、誤って厳密モードでグローバル変数を作成しています
//未声明的变量 result='这是一个没用var声明的全局变量';
- サイレント失敗とは、エラーを報告することも影響を与えることもありません。定数の値を変更すると、サイレント失敗は例外のスローに変換されます。 注: これは、ブラウザによって異なります。次のコード例は、例外をスローするものです。非厳密モードです。
'use strict';//开启严格模式 //严格模式下,意外创建全局变量,抛出ReferenceError message='this is message';//ReferenceError: result is not defined
const PI=3.14; PI=1.14;//静默失败 console.log(PI);//3.14
削除キーワードを無効にします
-
厳密モードでは、変数に削除演算子を使用できません
次のコード例は、非厳密モードで削除演算子を使用すると、結果はサイレント失敗になります
'use strict';//开启严格模式 const PI=3.14; PI=1.14;//抛出TypeError错误
var color='red'; delete color;
変数名の制限
-
厳密モードでは、JavaScript にも変数名に関する制限があり、特に、interface、let、packge、private、protected、public、stalic、yield は、すべて予約語として使用できます。 ECMAScript の次のバージョンでは、これらの識別子を変数名として使用すると構文エラーが発生します
削除不可能な属性
-
厳密モードでは、削除演算子を使用して削除不可能な属性を削除することはできません
次のコードは、delete 演算子を使用して、非厳密モードで削除不可能な属性を削除するもので、結果はサイレントエラーになります
'use strict';//开启严格模式 var color='red'; delete color;//SyntaxError: Delete of an unqualified identifier in strict mode.
delete Object.prototype;
属性名は一意である必要があります
-
厳密モードでは、オブジェクト すべての属性名はオブジェクト内で一意である必要があります
次のコードは、非厳密モードでは重複した名前の属性が許可されることを示しています最後の重複した名前の属性がその属性値を決定します
'use strict';//开启严格模式 delete Object.prototype;//TypeError: Cannot delete property 'prototype' of function Object() { [native code] }
var o={p:1,p:2};
読み取り専用属性の割り当て
-
厳密モードでは、読み取り専用属性は再割り当てできません
次のコードは、非厳密モードで読み取り専用属性を再割り当てするもので、結果はサイレントに失敗します
'use strict';//开启严格模式 var o={p:1,p:2};//不报错但是语法错误
var obj={}; Object.defineProperty(obj,'name',{ value:'张三', writable:false });//将属性设置为只读 obj.name='李四';
拡張不可能なオブジェクト
-
厳密モードでは、新しいプロパティを拡張不可能なオブジェクトに追加することはできません
次 コード例は、拡張不可能なオブジェクトに新しい属性を追加するものです。非厳密モードでは、結果はサイレントに失敗します
'use strict';//开启严格模式 var obj={}; Object.defineProperty(obj,'name',{ value:'张三', writable:false });//将属性设置为只读 obj.name='李四';//TypeError: Cannot assign to read only property 'name' of object '#<Object>'
var obj={}; Object.preventExtensinons(obj);//将对象设置为不可扩展 obj.name='张三';
パラメータ名は一意である必要があります
-
厳密モードでは、名前付き関数のパラメーターは一意である必要があります
次のコード例は、非厳密モードです。最後の重複したパラメーター名は、以前の重複したパラメーターをカバーします。引数[を介して以前のパラメーターにアクセスできます。 i]
'use strict';//开启严格模式 var obj={}; Object.preventExtensions(obj);//将对象变得不可扩展 obj.name='张三';//TypeError: Cannot add property name, object is not extensible
function sum(a,a,c){}
arguments
在严格模式下,arguments对象的行为也有所不同
1.非严格模式下,修改命名参数的值也会反应到arguments对象中
2.严格模式下,命名参数与arguments对象是完全独立的
function fun(value){ value='haha'; console.log(value);//haha console.log(arguments[0]);//非严格模式下 hah //严格模式下 hello } showValue('hello'); `` - arguments.callee() 在严格模式下,不能使用arguments对象的callee()方法 下例代码是非严格模式下使用arguments对象的callee()方法,表示调用函数本身
var f=function(){ return arguments.callee; }; f();
下例代码是严格模式下使用arguments对象的callee()方法,结果会抛出异常
'use strict';//开启严格模式 var f=function(){ return arguments.callee; } f(); /TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them/
- 函数声明的限制 在严格模式下,只能在全局域和函数域中声明函数 下例代码非严格模式下在任何位置声明函数都是合法的
if(true){ function f(){} }
下例是严格模式下在除全局域和函数域中声明函数是语法错误
'use strict';//开启严格模式 if(true){ function f(){}//语法错误,但是不报错 }
- 增加eval作用域 在严格模式下,使用eval()函数创建的变量只能在eval()函数内部使用 下例代码是非严格模式下eval()函数创建的变量在其他位置可以使用
eval('var n=40'); console.log(n);//40
下例代码是严格模式下eval()函数创建的变量只能在eval()函数内部使用
'use strict';//开启严格模式 eval('var n=40'); console.log(n);//ReferenceError: n is not defined
- 禁止读写 在严格模式下,禁止使用eval()和arguments作为标识符,也不允许读写它们的值 1.使用var声明 2.赋予另一个值 3.尝试修改包含的值 4.用作函数名 5.用作命名的函数的参数 6.在try...catch语句中用作例外名 在严格模式下,以下所有尝试将导致语法错误:
'use strict';//开启严格模式 eval=17; arguments++; ++eval; var obj={set p(arguments){}}; var eval; try{}catch(arguments){} function x(eval){} function argunments(){} var y=function eval(){} var f=new Function('arguments','"use strict";return 20;');
- 抑制this 在非严格模式下使用函数apply()或call()方法时,null或undefined值会被转换为全局对象 在严格模式下,函数的this值始终是指定的值(无论什么值)。
var color='red'; function sayColor(){ console.log(this.color);//非严格模式下 red /*严格模式下:TypeError: Cannot read property 'color' of null*/ }
相关推荐:
以上がjs の strict モードについて知っておくべきことの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。
