この記事には、JS strict モードでの関連する知識ポイントとコード例がまとめられています。興味がある場合は、エディターをフォローして一緒に学習してください。
いわゆる strict モードは、実際にはどの変数にも割り当てられない文字列「use strict」です。
このプロンプトがグローバル スコープで指定された場合、スクリプト全体が strict モードを使用します。関数内でのみ厳密モードをオンにすることもできます
1。厳密モードにはグローバル変数はありません
a="test"
厳密モードではエラーが報告されますが、非厳密モードでは正常です。
2. 変数の削除
varには3つの宣言状況があります
varで宣言されたグローバル変数
varで宣言されたローカル変数
eval()で宣言されたグローバル変数
1 番目と 2 番目のケースは、delete を使用して削除することはできません。
まず、最初のケースで宣言されたグローバル オブジェクトは Windows の属性ですが、この属性は configurable=false であるため削除できません
2 番目のケースのローカル変数はさらに悪いことです。添付されたオブジェクトが誰であるかさえわかります。
3 番目のケース eval() については後で説明します。
本題に戻ります。つまり、非厳密モードでは変数を削除できますが、失敗して false が返されます。
厳密モードで変数を削除すると、エラーが報告されます。
3. オブジェクト
以下の状況では、オブジェクトの操作時にエラーが報告されます
読み取り専用プロパティに値を代入するとエラーが報告されます
構成可能なプロパティはエラーを報告します
それは拡張不可能なオブジェクトです属性を追加するときにエラーが報告されます
オブジェクトリテラルを使用する場合、属性名は一意である必要があります。たとえば、
var person={ name:"1", name:"2" }
は、非厳密モードではデフォルトで 2 番目の値になり、厳密モードではエラーが報告されます。
4. 関数
厳密モードでは、関数パラメータ名が一意である必要があります
function(n,n){ // todo }
非厳密モードでは、この関数宣言はパラメータ名を介してアクセスできるのは 2 番目のパラメータのみです。最初のパラメータは引数によるアクセスです。
引数も 2 つのモードで異なります
非厳密モードでは、名前付きパラメーターの値の変更は引数オブジェクトに反映されますが、厳密モードでは 2 つの値は独立しています。
arguments.callee (関数自体を参照) と argument.caller (呼び出し関数を参照) を削除します。
厳密モードでは、関数名に js の予約語を使用できません
** 厳密モードでは、関数はスクリプトのトップレベルと関数内でのみ宣言できます。関数を if ステートメントで宣言すると、構文エラーが発生します。 。 **
if(true){ function(){ // 严格模式下报错 } }
5.this
関数 apply()、call() を非厳密モードで使用する場合、渡された null または未定義の値はグローバル オブジェクトに変換されます。厳密モードでは、指定された値に関係なく、関数の this は常に指定された値になります。
rreee以上が皆さんのためにまとめたもので、今後皆さんのお役に立てれば幸いです。
関連記事:
Vue.js+Flask シングルページAPPケースの構築詳細説明(コード付き)
以上がJS strict モードの知識ポイントのまとめ (詳細な回答)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。