【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

  有沒有全對呢?If the answer is "yes", congratulations!

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

  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"

  2) 對象轉字符串

 

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

 

結束語

若有不足之處,歡迎指正。

 

參考地址

[1] 數據類型轉換.阮一峰. http://javascript.ruanyifeng.com/grammar/conversion.html

[2] http://www.jb51.net/article/34190.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM