• 【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(' v 12.34 '); // 12.34
       parseInt(' v 12.34 '); // 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

  • 相关阅读:
    设计模式之观察者模式
    设计模式之模板方法模式
    设计模式之代理模式(全面讲解)
    设计模式之工厂模式(包含三种模式)
    设计模式之单例模式(包含三种方式)
    opencv+vs2015 堆内存析构异常
    用python来压缩文件
    GPT安装ubuntu的问题
    Two Sum and add Two Numbers
    [LeetCode] Palindrome Partitioning II
  • 原文地址:https://www.cnblogs.com/codelovers/p/5345484.html
Copyright © 2020-2023  润新知