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
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