JS厳格モード
3261 ワード
JS厳格モード概要「use stript」コマンドはJavaScript 1.8.5(ECMAScript 5)に追加されます.これは文ではありませんが、字面量表式です.JavaScriptの古いバージョンでは無視されます.「use strict」の目的は指定コードが厳密な条件で実行されることです.厳密なモードでは、未宣言の変数は使用できません.将来的にJavascriptの新しいバージョンに移行するために、厳格なモードはいくつかの保留キーワードを追加しました.implemens interface let package prvate protected pblic static yieldが厳格なモードに入った後、どのような行動変更が必要ですか?consolone.log(a)/10厳格モード:a=10;consolie.log(a)//a is not defined
function f(){"use strict";return!this;////'はtrueに戻ります.厳密なモードでは、thisの値はundefinedなので、"!this"はtrueです.
したがって、コンストラクタを使うときに、newを忘れたら、thisは全体のオブジェクトに向けず、エラーを報告します.function f(){"use strict";this.a=1;};f()//エラー、this未定義
「use strict」var x=3.14delete x;//エラーを申し込む
関数の削除は許可されません.
「use strict」function x(p 1,p 2){}delete x;//エラーを申し込む
8進数は禁止されています.
「use strict」var x=010;//エラーを申し込む
変換記号の使用は許可されていません.
「use strict」var x=\010;//エラーを申し込む
読み取り専用属性に値を付けることは許可されていません.
「use strict」var obj={}Object.defineProperty(obj,“x”,{value:0,writable:false});
Obj.x=3.14;//エラーを申し込む
getterメソッドで読み取った属性に値を付けることは許されません.
「use strict」var obj={get x(){return 0}
Obj.x=3.14;//エラーを申し込む
削除不可の属性を削除してはいけません.「use strict」.delete Object.prototype;//エラーを申し込む
変数名には「eval」文字列は使えません.
「use strict」var eval=3.14;/エラーを申し込む
変数名には「argments」文字列は使えません.
「use strict」var argments=3.14;/エラーを申し込む
以下のような語句を使用してはいけません.
「use strict」with(Math){x=cos(2)}//エラーを申し込む
いくつかのセキュリティ上の理由により、スコープeval()で作成された変数は起動できません.
「use strict」eval(「var x=2」)alert(x)//エラーを申し込む
参考文献
https://www.cnblogs.com/FD-1909/p/11561392.html
2.this
:function fn(){ console.log(this) } //window
:function fn(){ console.log(this) } //undefined
Function f(){return!this;///}falseに戻ると、「this」は全体のオブジェクトを指すので、「!this」はfalseです.function f(){"use strict";return!this;////'はtrueに戻ります.厳密なモードでは、thisの値はundefinedなので、"!this"はtrueです.
したがって、コンストラクタを使うときに、newを忘れたら、thisは全体のオブジェクトに向けず、エラーを報告します.function f(){"use strict";this.a=1;};f()//エラー、this未定義
3.
:function fn( a,b,b ){ console.log(a,b) }
fn(1,2,3) //1,3
:function fn( a,b,b ){ }
// :Duplicate parameter name not allowed in this context
4.arguments
4.1 arguments
:function fn(a){
a=20;
console.log(a); //20
console.log(arguments[0]); //20
}
fn(10);
:function fn(a){
a=20;
console.log(a); //20
console.log(arguments[0]); //10
}
fn(10);
4.2 arguments ( )
:function fn(a){
if( a == 1 ){
return 1;
}
return arguments.callee(a-1) + a;
}
fn(3); //6
:function fn(a){
if( a == 1 ){
return 1;
}
return arguments.callee(a-1) + a;
}
// :'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
// :"caller","arguments","callee",
厳密なモードの制限は、変数やオブジェクトの削除を許可しません.「use strict」var x=3.14delete x;//エラーを申し込む
関数の削除は許可されません.
「use strict」function x(p 1,p 2){}delete x;//エラーを申し込む
8進数は禁止されています.
「use strict」var x=010;//エラーを申し込む
変換記号の使用は許可されていません.
「use strict」var x=\010;//エラーを申し込む
読み取り専用属性に値を付けることは許可されていません.
「use strict」var obj={}Object.defineProperty(obj,“x”,{value:0,writable:false});
Obj.x=3.14;//エラーを申し込む
getterメソッドで読み取った属性に値を付けることは許されません.
「use strict」var obj={get x(){return 0}
Obj.x=3.14;//エラーを申し込む
削除不可の属性を削除してはいけません.「use strict」.delete Object.prototype;//エラーを申し込む
変数名には「eval」文字列は使えません.
「use strict」var eval=3.14;/エラーを申し込む
変数名には「argments」文字列は使えません.
「use strict」var argments=3.14;/エラーを申し込む
以下のような語句を使用してはいけません.
「use strict」with(Math){x=cos(2)}//エラーを申し込む
いくつかのセキュリティ上の理由により、スコープeval()で作成された変数は起動できません.
「use strict」eval(「var x=2」)alert(x)//エラーを申し込む
参考文献
https://www.cnblogs.com/FD-1909/p/11561392.html