この記事は主に、JS strict モードでの関連する知識ポイントとコード例をまとめています。興味がある場合は、エディターをフォローして一緒に学習してください。
いわゆる strict モードは、実際にはどの変数にも割り当てられない文字列「use strict」です。
このプロンプトがグローバル スコープで指定された場合、スクリプト全体が strict モードを使用します。関数内でのみ厳密モードをオンにすることもできます
1。厳密モードにはグローバル変数はありません
a="test"
厳密モードではエラーが報告されますが、非厳密モードでは正常です。モード
2. 変数の削除
var には 3 つの宣言状況があります
var 宣言されたグローバル変数
var 宣言されたローカル変数
eval()
first と Second この場合、delete では削除できません。
まず、最初のケースで宣言されたグローバル オブジェクトは Windows の属性ですが、この属性は configurable=false になっており、削除できません
2 番目のケースでは、ローカル変数はさらに悪化します。添付されたオブジェクトには誰もアクセスできません。削除方法はわかりません
3 番目の eval() については後で説明します。
本題に戻ります。つまり、非厳密モードでは変数を削除できますが、失敗して false が返されます。
厳密モードで変数を削除すると、エラーが報告されます。
3. オブジェクト
以下の状況では、オブジェクトを操作するとエラーが報告されます
読み取り専用属性に値を代入するとエラーが報告されます
-configurable 属性はエラーを報告します
拡張不可能です オブジェクトに属性を追加するときにエラーが報告されます
オブジェクト リテラルを使用する場合、属性名は一意である必要があります。たとえば、
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 は常に指定された値になります。
var a="1"; function test(){ console.log(this.a) } test.call(null) 在非严格模式下会输出1,严格模式下this就指代的就是null,null没有a属性,就会报错。
関連する推奨事項:
JavaScript 厳密モードでのこれについては、詳細を参照してください問題の説明
以上がJS strictモードの例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。