前端-javascript-不同数据类型间的运算,数据类型转换规则

来源:互联网 发布:网络安全工程师报名 编辑:程序博客网 时间:2024/05/19 06:16

欢迎加入javascript讨论群 558052642    群里有丰富的JS学习资源,且有较好的学习讨论气氛,且能陪你谈天侃地,气氛活跃;  




双目运算符 ---> 当两个操作类型处于不同类型时的数据类型转换

    
   数据类型: (1)undefined 未定义型   (2)boolean 布尔类型   (3)string 字符串类型  (4)number 数字型  (5) object 对象类型和null;   (6)NaN 一种数字类型的产物,姑且归类于数字类型
   
   说明: 
      (1) undefined值 是在 变量声明且没有初始化时间内存在的一种特殊值;
           在变量声明之后没有被初始化, 那么此时变量中存储的就是垃圾值(可能很多人认为刚申请的内存不应该全0吗? 其实不是,刚申请的内存可能是别的变量刚刚释放的,所以里面是存在0101之类的数据的);对于垃圾值,运算时没有任何意义的,所以当undefined参与运算时,结果也是没有任何意义的,所以返回结果是NaN;
    
        
           1) undefined 在 逻辑运算或者真假判断为  false;     
           2)  undefined +  string 时 , 会直接转为“undefined”再参与运算;
                当然,顺便插一句:
                    boolean类型  + string类型时  --> boolean类型变量先转为 "true"或者“false”再参与运算;
                    number类型   + string类型时  --> 同理,先转字符串
                    null, NaN  也同理,转为 "null" 与 “NaN”


          3) 上面讲了特殊的, 其余的情形 与 undefined运算的结果都是 NaN;
          


     (2) 数学运算 + - * %  包括  单目运算符+,-,++,--                   
        
          上面已经说明了,当有个操作数是string类型时,+表示为字符串连接符; 但是+为单目运算符的时候, +"123"的表达式结果为 数字123;


          排除上面的特殊情形:
          1) 当使用算数运算符操作时,非Number类型的操作数,先转为数字,在进行计算; 不能转为数字的转为NaN;


              如:  true + 2 --> true先转为1,在1+2 -->3
                   false+ 2 --> false 转为0, 在 0+2 -->2


                   "123" - 5  --> "123"先转为 123 ,再 123-5 --> 108   这个表达式顺便提一句,只有(+)在运到string变量才是连接符,才会先转成string,在运算;其余的都是先转数字再运算;
                   另外"123",“123.3”,当字符串隐式转数字时,必须能够完全转成number类型数据才行,否则是NaN,如"123.4a"
                  
                  "123.4" % 10 --> 先转为 123.4, 再 123.4 % 10
                  “123.4a” - 10 --> 先转数字,但是因为不是数字,所以转为NaN , 再 NaN-10 -->NaN




                  true + false --> 其实当boolean类型值在参与数学运算时, 也是先转成 1+0 --> 0




           
     (3) 赋值运算符 与 复合赋值运算符   


           1) =  
              因为js是弱类型语言,变量的类型是由每一次赋值运算操作而决定的。 (每次赋值的数据类型决定变量此时的数据类型,也就是说变量可以存储任意类型的数据)


           2) += , -= ,*= 。。。             
              规则与算数类型类似, 其中+=在遇到string类型变量时,也会转变为 字符串连接符;




     (4)关系运算符  
            >  >=  <  <=
            ==, ===, !=, !==


            1) 强调: == 只要数据相等就返回true, === 数据和数据类型都相等返回true; !===数据或者数据类型不相等就返回true, !=数据不相等返回true;


            2) 关系运算符,如果双方操作数类型不同,转为数字类型,再比较;


                如 "123.0" == 123,  "123"==123.0  都是返回true
                   "1"     == true   也是返回true, 从这点也可以看出,其他类型的非空,其实都 ==true;


      (5) 逻辑运算符
            这个讨论没多大意义,因为两边无论什么表达式,都是先得到操作数的boolean结果, 当然你也可以看做 表达式==true是否为真;




 好了,双目运算符中 不同类型操作数间的运算总结完成; 其实有一点规律可以给你去推测类型的转换方向:  双目运算符以及两个操作数组成的表达式的最终结果的数据类型为啥, 那么操作数运算时,转换的类型就是啥; 当然逻辑运算不适合这条规律;                         
0 0