js數據類型轉換

輸出下列數據比較結果:

    [] == 0; //==============================================================true
    [] == false; //==========================================================true
    [] == undefined; //======================================================false
    [] == null; //===========================================================false
    [] == ''; //=============================================================true

    0 == false; //===========================================================true
    0 == undefined; //=======================================================false
    0 == null; //============================================================false
    0 == ''; //==============================================================true

    false == undefined; //===================================================false
    false == null; //========================================================false
    false == ''; // =========================================================true
    false == 'false'; //=====================================================fasle

    undefined == null; //====================================================true
    undefined == ''; // =====================================================false
    undefined == 'undefined'; //=============================================false

    null == ''; //===========================================================false

兩個不同類型數據比較時隱式轉換規則

1)  數字和字符串、布爾類型、數組進行比較時,字符串(或布爾類型、或數組)先轉換爲數字(Number),再進行比較;數組轉數字請參看後文。

  123 == '123asd'; //false
    123 == '123'; //true

    123 == false; //false
    123 == true; //false

使用 if(num) 和 if(num == true) 結果不一樣。前者使用Boolean()轉換Num, 後者使用Number轉換true。

 var num = 123;
    if(num) {
        console.log(1); //輸出1
    }
    if(num == true) {
        console.log(2); //無輸出
    }

    var str = "qwe";
    if(str) {
        console.log(1); //輸出1
    }
    if(str == true) {
        console.log(2); //無輸出
    }

2) 字符串和布爾類型比較,看完下面的代碼我瘋了。如果一定要給一個解釋,那麼一定是進行比較的兩個數據同時經過Number()的洗禮後再進行比較。數組和布爾類型的比較也如此。

 "qwe" == false; //false
    "qwe" == true; //false
    "" == false; // true
    "" == true; //false

    [] == false; //true
    [0] ==false; //true
    [00] ==false; // true
    [0,0] == false ; //false

3) undefined 除了和null進行非全等比較返回true,其它均返回false。null 除了和 undefined進行非全等比較返回true,其它均返回false。

4) 數組(或對象)和字符串進行比較時,數組(或對象)會轉換成字符串再進行比較。

[] == ""; //true
    [0] == ""; //false
    [0] == "0"; //true

    var obj = {a: 1};
    obj == ""; //false
    obj == "[object Object]"; //true


Number() 強制轉換成數值

  1) 字符串轉數值,能解析的返回數值,不能解析的返回NAN(Not a Number)。

    Number('123'); //123
    Number('123shj'); //NAN
    parseInt('123shj'); // 123
   Number('\t\v\r12.34\n'); // 12.34
   parseInt('\t\v\r12.34\n'); // 12

  2) 布爾值轉數值

    Number(true); // 1
    Number(false); //0

  3) Unfined 轉數值

    Number('undefined'); // NAN

  4) null 轉數值

    Number(null); // 0

  5) 對象轉數值

    Number({a: 2}); // NAN

String() 強制轉換成字符串

  1) 原始數據類型轉換爲字符串,相當於直接把原數據用引號包起來。

    String(123); // "123"
    String(true); // "true"
    String(undefined) // "undefined"
    String(null); // "null"

Boolean() 強制轉換成布爾類型

  所有對象轉換爲Bool類型都爲true,只有以下幾個數值轉換爲Bool爲false: undefined/null/0/NAN/""。

   undefined == false 返回 false, Boolean(undefined) = false.

   [] == false 返回true,  Boolean([]) = true.

複製代碼
    Boolean(undefined); //false
    Boolean(null); //false
    Boolean(0); //false
    Boolean(NAN); //false
    Boolean(""); //false
    Boolean([]); //true
    Boolean({}); //true
    Boolean(new Boolean(false)); // true



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