JavaScriptの3-文法

8452 ワード

1、block
一般的には{}が含まれているコードブロックですが、jsはブロックスコープがないが、関数スコープ、グローバルスコープがあります.
2、var
1
var a = b = 1; 
例えば:
1
2
3
4
5
6
function () {
var a = b = 1;
}
foo();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number" b
3、try catch
1
2
3
4
5
6
7
try {
throw "test";
} catch(ex) {
console.log(ex); // "test"
} finally {
console.log("finally"); // finally
}
4、functionfunction fd() { // do something }; // var fe = function { // do something }; // 違い:関数宣言は声明の前に呼び出すことができ、エラーがありません.また、関数式は宣言前に呼び出すことができません.TypeErrがあります.
5、for…in
1
2
3
4
5
var p;
var obj = {x:1, y:2};
for(p in obj) {
// obj key
}
いくつか注意が必要です.
  • 順序不確定
  • enumerableがfalseの時は
  • を表示しません.
  • for…inオブジェクト属性はプロトタイプチェーンの影響を受けます.
    6、厳格モード
    厳格なモードは特殊な実行モードで、一部の言語での不足を修復し、より強いエラーチェックを提供し、安全性を強化します.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 1.
    function func() {
    // ps:ie ,
    // func
    ;
    }  JavaScript - an>

    // 2.
    "use strict" //
    function func() {

    }
    厳格なモード:
  • はwithを使用してはいけません.
  • は、宣言されていない変数に値を割り当てることができません.
  • アーグメンントは、パラメータの静的変数に変化する.
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //      
    !function(a) {
    // "use strict";
    arguments[0] = 100;
    console.log(a);
    }(1);
    // ps: , arguments[0] a , a 100,
    // , !function(a){}(); arguments ,a undefined
    // :
    // 1) : 1, undefined
    // 2) :
  • 厳格なモードでは、形参報エラーを削除します.(1.co nfigrableはtrueであればSyntxErrを報告します.2.configrableはfalseであればType Errを報告します.)
  • オブジェクトの字面量属性はエラーを繰り返します.var obj = {x:1, x:2}; // SyntaxError
  • 八進法禁止文字数console.log(0123); //SyntaxError
  • eval、argmentsがキーワードになり、変数、関数名として使用できません.違反したらSyntxErrror
  • に報告します.
  • eval独立作用ドメイン
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    !function() {
    eval("val evalValue = 2;");
    console.log(typeof evalValue);//number
    }();

    !function() {
    ;
    eval("var evalValue = 2;");
    console.log(typeof evalValue);//undefined, eval
    }
    厳格なパターンのまとめ:
  • はwithを使用してはいけません.
  • すべての変数は、暗黙的にグローバル変数を作成するのではなく、宣言されていない変数にエラーを報告するために宣言しなければなりません.
  • evalのコードは、evalが存在する作用ドメイン変数、関数を作成することができません.evalのために単独の作用領域を作成し、evalが戻った時に廃棄します.
  • 関数の中の特殊なオブジェクトアーグメンントは、厳密なモードではなく静的なコピーであり、アーグメンントを修正するか、または変形変形は相互に影響します.
  • configrableを削除するとfalseにエラーが発生します.選択を無視するのではありません.
  • 八進法の字面量を禁止します.
  • eval、argmentsをキーワードとして、変数名または関数名として使用できません.
  • 一般関数の呼び出し(オブジェクトメソッドの呼び出しではなく、appy/call/bindなどでthis指向を修正するのではなく)、thisはグローバルオブジェクトではなくnullを指す.
  • appy/callを使用すると、nullまたはundefinedに入ると、thisはグローバルオブジェクトではなくnullまたはundefinedを指す.
  • は、書き捨て不可能な属性を修正しようと試み、拡張不可能なオブジェクトに属性時報Type Errorを追加し、無視する代わりに.
  • argments.caller、argments.calleeは
  • を無効にしました.