JavaScript中的隐式类型转换

版权声明:欢迎转载 转载请声明出处 https://blog.csdn.net/Surrin1999/article/details/83932620

最近在学习渡一教育的JavaScript精品课,成哥讲的还是很棒的,开这个系列记录下学习笔记

本次学习笔记,对应web前端开发JavaScript精英课js的第六课时

目录

 一.is NaN()

 二.++ -- 自增自减运算符

 三. + -   (一元正负)

 四. + (连接符)

 五. -  *  /  % 运算符

 六.  >  <  >=  <=

 七. ==  !=

 八. 特殊规律

扫描二维码关注公众号,回复: 4074860 查看本文章


一.is NaN()

        当调用is NaN()方法时,会隐式的把调用者以Number(xxx)的方式转换为number类型,

        需要注意的是,转换时不会改变调用者的数据类型

<script>
    var a = "abc";
    console.log(isNaN(a) + " : " + typeof(a));  // true : string    不会改变原类型
    console.log(isNaN(null));  // false
</script>

       还有一点就是Number(null) 得到的返回值为0,因此isNaN(null)的返回值为false

 二.++ -- 自增自减运算符

       当使用自增自减运算符时,无论是b++还是++b都会首先调用Number(b)转换为number类型

       且因为这是直接对原参数操作,会改变原参数的数据类型

       

<script>
    var b = "123";
    console.log(typeof(b)); // String
    console.log(++b);       // 124
    console.log(--b);       // 123
    console.log(typeof(b)); // Number
    b = "abc";
    console.log((b++) + " : " + typeof(b)); // NaN number 会改变原类型
</script>

      还有一点特殊情况就是,如最后的  console.log((b++) + " : " + typeof(b));  尽管“abc”转换为Number失败了,变为了NaN,但是其数据类型依然是number

 三. + -   (一元正负)

      

<script>
    var c = +"abc";
    console.log(c + " : " + typeof(c)); // NaN number
    c = -"abc";
    console.log(c + " : " + typeof(c)); // NaN number      
</script>

   没啥好说的,加了+ / -就是相当于正数和负数,隐式调用Number(xxx),转换为了number类型

四. + (连接符)

   这个就更加没啥好说的了,学过Java再熟悉不过 就一个字符串拼接

   

<script>
    var d = "abc";
    var d1 = 123;
    console.log((d+d1) + " : " + typeof(d1));   // abc123 number 不会改变原类型    
</script>

 五. -  *  /  % 运算符

  var e = "3" * 2; 在控制台调试下会发现等于6,其实本质上也是使用Number(xxx)隐式转换字符串为number类型了,具体可看下面例子

   

<script>
    var e = "abc";
    var e1 = e - 1;
    var e2 = e * 1;
    var e3 = e / 1;
    var e4 = e % 1;
    console.log(e1 + ":" + typeof(e1)); // NaN number
    console.log(e2 + ":" + typeof(e2)); // NaN number
    console.log(e3 + ":" + typeof(e3)); // NaN number
    console.log(e4 + ":" + typeof(e4)); // NaN number 
</script>

  e1 e2 e3 e4均被转换为number类型了

六.  >  <  >=  <=

  若字符串的内容为数字,与另外一个数字比较 那么字符串内容为数字的字符串会被Nunber(xxx)隐式转换为number类型再比较

  若字符串与字符串比较    则会从首个字符开始比较unidode码顺序

  需要注意的是下面第一种情况 数字和字符串内容非数字的字符串相比返回值为false,因为Number()会把它转为NaN 无法比较

<script>
    // 注意数字和非数字字符串比较 如下 会变这样3 > Number("!"); 而和NaN自然无法比较 什么都是false
    console.log(3 > "!");
    // 当字符串是数字 和数字比较 原理同上
    console.log(3 > "2");    // true
    // 特殊的
    console.log("true  > 'a' --- " + (true > "a"));   // false
    console.log("true  < 'a' --- " + (true < "a"));   // false
    console.log("true  == 'a' --- " + (true == "a")); // false
</script>

七. ==  !=

    若与数字比较则,会隐式转换为数字 无论是字符串形式的数字还是普通数字 

    需要注意的是最后两个    false == ""  返回值为true  以及 NaN == NaN 返回值为false

<script>
   // 与数字比较则会隐式转换为数字 无论是字符串形式的数字还是普通数字
   console.log(1 == true);  // true
   console.log(0 == false); // true
   console.log(3 == "3");   // true
   console.log("false == undefined --- " + (false == undefined)); // false
   console.log("false == null --- " + (false == null));  // false
   console.log("false == NaN --- " + (false == NaN));    // false
   console.log("true  == '1' --- " + (true == "1"));     // true
   console.log("false  == '0' --- " + (false == "0"));   // true
   console.log("false == '' --- " + (false == ""));      // true 这个很特殊
   console.log("NaN == NaN --- " + (NaN == NaN));        // false
</script>

  八. 特殊规律

    没什么好说的 记住就完事了

<script>
        console.log(undefined > 0);     // false
        console.log(undefined < 0);     // false
        console.log(undefined == 0);    // false
        console.log(null > 0)           // false
        console.log(null < 0);          // false
        console.log(null == 0);         // false
        console.log(undefined == null); // true
        console.log(typeof(NULL) == typeof(undefined)); // true 因为NULL相当于一个未定义的变量
        console.log(typeof(null));      // object 规定的
        console.log(typeof(undefined)); // undefined 规定的
        console.log(typeof(NaN));       // number 也很特殊 规定的
        console.log(typeof typeof(NaN));// string 因为typeof(NaN)返回的是一个string类型
        var student1 = {
            name : "ljy",
            id : 123
        }
        var student2 = new Object();
        console.log(Number(student1));  // NaN 但如果用typeof测试会知道其实已经转为number
        console.log(Number(student2));  // NaN 但如果用typeof测试会知道其实已经转为number
        console.log(Boolean(null));     // false
        console.log(Boolean(undefined));// false
</script>

   最后要记住的就是 typeof()返回的是字符串 比如 typeof(typeof(undefined));返回值为string

  

猜你喜欢

转载自blog.csdn.net/Surrin1999/article/details/83932620