Javascript學習筆記【第四章】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第四章.html</title>
</head>
<body>

<script type="text/javascript">
    var undefined = "sd";      //undefined是全局變量,和null不同,他不是一個關鍵字
    var o = undefined + "5";
    console.log(o);//undefined5


    var _sz01 = [[1, 2, 3], [4, 5, 6]];//表達式是可以嵌套的
    var _sz02 = [1, , , , 5];         //其中三個元素是 undefined
    console.log(_sz02[3]);      //undefined


    var _dx = {                   //對象直接量也可以嵌套
        a: {x: 1, y: 2},
        b: {x: 1, y: 2}
    };
    console.log(_dx.a.x + _dx.b.y);  //3

    var _o = {x: 1, y: {z: 3}};
    var _a = [o, 4, [5, 6]];
    console.log(_o.x);
    console.log(_o.y.z);
    console.log(_o["x"]);
    console.log(_a[1]);
    console.log(_a[2]["1"]);
    console.log(_a[0].x);

    var _obj = new Object();
    console.log(_obj instanceof Object);   //instanceof 測試對象類     true
    console.log("a" in _dx);                //in 測試屬性是否存在   true

    console.log(~100);                       //-101   按位求反

    //parseInt( String , 傳參的位數 ) //2-16進制 轉化成 10進制
    console.log(parseInt("fa", 16));//250

    console.log(1 + true);        // 2  在 + 運算符中,會先把非字符串和數字的類型轉化成數字,如果數字不成立則轉化成字符串
    console.log(false + true);   // 1 false=0 true=1
    console.log(1 + {});          // 1[object Object]  {}對象不是數字 則轉換成字符串 [object Object]
    console.log(1 + undefined);   // NaN
    console.log(1 - {});          // NaN
    console.log(1 - "123asd");    // NaN
    console.log(1 - "101");       // -100


    //一元運算符 + - ++ -- 會將操作數轉換成數字

    var _$1 = 1, _$2 = ++_$1;
    var _$3 = 1, _$4 = _$3++;
    console.log(_$1 + "|" + _$2); // 2
    console.log(_$3 + "|" + _$4); // 2 1

    //位運算符

    // & 只有兩個操作數中相對應的位都是1,結果中的這一位纔是1.
    console.log(parseInt("1010", 2) + "&" + parseInt("1110", 2)); //
    console.log(10 & 14);       // 10:1010 & 14:1110  = 1010 =10
    console.log(parseInt("1010", 2)); //10

    // | 如果其中一個操作數爲1,那麼結果就是1
    console.log(parseInt("1010", 2) + "|" + parseInt("1110", 2)); //
    console.log(10 | 14);       // 10:1010 & 14:1110  = 1110 =14
    console.log(parseInt("1110", 2)); //10

    // ^ 都爲1時 則結果過爲1  都爲0時,則結果爲0  其中一個數爲1時候 則結果爲0
    console.log(parseInt("1010", 2) + "^" + parseInt("1110", 2)); //
    console.log(10 ^ 14);       // 10:1010 & 14:1110  = 0100 =4
    console.log(parseInt("0100", 2)); //4

    // << 左移運算符
    console.log(7 << 2); //28 7*(2*2) 2的2次方
    console.log(7 << 3); //56 7*(2*2*2) 2的3次方

    // << 右移運算符
    console.log(100 >> 2); //25  100/(2*2)  2的2次方 //忽略餘數
    console.log(100 >> 4); //6  100/(2*2*2*2)  2的4次方 //忽略餘數

    // != == ... !== === 相等   嚴格相等
    console.log("333" == 333);    //true;
    console.log("333" != 333);    //false;
    console.log("333" === 333);   //false;
    console.log("333" !== 333);   //true;


    var __ = {x: 1};
    if (__ && __.x) { //true 只要是真值就可以判斷爲真
        console.log("123");
    }

    function _(num) {
        console.log(num);
    }
    var p = null;
    if (p == null) {
        _("1");
    }

    //寫法不同  意思一樣  同上
    (p == null) && _("2");


    // || OR運算符 兩個爲真值則返回真值,其中一個爲假值 則返回假值
    if (true || true) {
        console.log("||");
    }

    var max_w, pre = {max_w};
    //如果max_w定義了,則直接用它,否則在pre對象中查找max_w,如果沒有定義它,則使用一個寫死的常量。
    var max = max_w || pre.max_w || 500;
    console.log(max);

    var p = true, q = false; //對於p和q取任意值,這兩個等式都永遠成立;
    console.log(!(p && q) === !p || !q); //true;
    console.log(!(p || q) === !p && !q); //true;

    //eval函數 可計算某個字符串,並執行其中的的 JavaScript 代碼。
    var ss = eval("alert('123')"); //彈出123
    console.log(ss); //undefined

    var geval = eval;                     //獲取 全局eval函數
    var x = "x", y = "y";                    //定義2個全局變量
    function f() {
        var x = "f()";                    //定義局部變量
        eval("x+= 'f()';");             //直接 eval 更改局部變量的值
        return x;                       //fh
    }
    function b() {
        var y = "b()";                    //定義局部變量
        geval("y+= 'b()';");             //直接 geval 更改全局變量的值
        return y;                       //fh
    }

    console.log(f(), x);    // f()f() x
    console.log(b(), y);    // b() yb()

    //條件運算符 ? :
    var x = 0 - 2 * 3 - 56;
    console.log(x >= 0 ? x : -x); //運用條件運算符 求 絕對值 返回的是 :左右兩邊的值

    //合理運用運算符可以減少代碼量

    var gree = "hello" + (null ? true : false);
    //等同於
    gree="hello";
    if(null){
        gree+=true;
    }else{
        gree+=false;
    }

    //typeof運算符
    var _t=typeof null;              //typeof 可以是函數也可以是運算符
    console.log(_t);                   //object
    console.log(typeof(NaN));         //number

    //delete運算符 //主要用於刪除對象的屬性
    //可以是函數也可以是運算符
    _t={x:1,y:2};
    delete _t.x; //刪除的_t的x屬性 返回true;
    delete _t.z; //刪除的_t不存在z屬性 返回true;
    delete _t;  //返回false 不能刪除通過var聲明的變量
    var s=delete(_t.g); //true;
    console.log(s);//true

    this.z=1; //
    console.log(this.z);//1
    console.log(delete z);//true; 可以執行,在嚴格模式下會拋出異常,這是用 this.z代替
    console.log(this.z);//undefined; //已經刪除了


    //void運算符跳過 可有可無 一般運用在 a連接中  javascript:void(0);

    //逗號運算符 可以是任何操作數,由左向右計算。
    var o=2,o=o*8,o=o-6;
    console.log(o);//10
    //for循環裏面最常用

    //2015年9月20日 15:49:38  第四章完..

</script>

</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章