js基本概念(中)之操作符

  • 操作符

    • 一元操作符(++、- -)

      1. 递增和递减操作符

        var s1 = "2";
        var s2 = "z";
        var s3 = false;
        var s4 = 1.1;
        var o = {
            valueOf: function(){
                return -1;
                }
            };
        s1++;   //3
        s2++;   //NaN
        s3++;   //1
        s4--;   //0.10000000000000009(由于浮点舍入错误所致)
        s5--;   //-2
      2. 一元加和减操作符(+、-)
        a. 一元加操作符放在数值前面不会对数值产生任何影响;一元减操作符会使数值变成负数
        b. 应用在非数值,该操作符会像Number()函数一样对这个值进行转换

        var s1 = "0.1";
        var s2 = "1.1";
        var s3 = "z";
        var b = false;
        var f = 1.1;
        var o = {
            valueOf: function(){
                return -1;
            }
        };
        
        s1 = +s1;   //0.1
        s2 = +s2;   //1.1
        s3 = +s3;   //NaN
        b = -b;     //0
        f = -f;     //-1.1
        0 = -0;     //1
    • 数值

      • 数值存储

        1.所有数值都以64位格式存储,转换成32位执行操作,结果再转换回64位
        2.对于有符号的整数,32位中的前31位用于表示整数的值,第32位(符号位)用于表示数值的符号:0表示整数,1表示负数
        3.正数以纯二进制格式存储,31位中的每一位都表示2的幂
        4.负数以二进制补码格式存储

      • 计算一个数值的二进制补码:

        1. 绝对值(二进制)
        2. 反码(即将1替换为0,0替换为1)
        3. +1

        求-18的二进制码,首先要求得18的二进制码,即:
        0000 0000 0000 0000 0000 0000 0001 0010
        然后,求其二进制反码,即0和1互换:
        1111 1111 1111 1111 1111 1111 1110 1101
        最后,二进制反码加1:
        1111 1111 1111 1111 1111 1111 1110 1101
        得到
        1111 1111 1111 1111 1111 1111 1110 1110

    • 位操作符

      • 按位非(~)

        1. 返回数值的反码
        2. 本质是:操作数的负值减1

        var num1 = 25; //二进制0000 0000 0000 0000 0000 0000 0001 1001
        var num2 = ~num1; //二进制1111 1111 1111 1111 1111 1111 110 0110
        alert(num1); //-26

        上面是num2在计算机中存储的二进制格式,那么num2到底是多少呢(怎么看出来)?↓
        从二进制第32位是1来看,num2是负数,则先求绝对值:
        0111 1111 1111 1111 1111 1111 1110 0110
        再求其反码:
        1000 0000 0000 0000 0000 0000 0001 1001
        反码加1:
        1000 0000 0000 0000 0000 0000 0001 1001
        得到
        1000 0000 0000 0000 0000 0000 0001 1010 (即-26)

    • 位操作符

      • 按位与(&)

        1. 1&1—>1
        2. 1&0—>0
        3. 0&1—>0
        4. 0&0—>0
      • 按位或(|)

        1. 1|1—>1
        2. 1|0—>1
        3. 0|1—>1
        4. 0|0—>0
      • 按位异或(^)

        1. 1^1—>0
        2. 1^0—>1
        3. 0^1—>1
        4. 0^0—>0
      • 左移(<<)

        1. 将数值的所有位向左移动指定的位数,以0填充右侧空位(不会影响符号位,例:-2左移5位结果是-64,符号位不参与移动?)
          var oldValue = 2;   //等于二进制的10
          var newValue = oldValue << 5;   //等于二进制的1000000,十进制的64
      • 有符号的右移(>>)

        1. 将数值向右移动,保留符号位,且以符号位的值填充符号位右侧、原数值左侧的空位
      • 无符号的右移(>>>)

        1. 数值的所有32位都向右移动,以0填充空位
        2. 无符号右移操作符会把负数的二进制码当做正数的二进制码(会导致无符号右移后的结果非常之大)
          var oldValue = -64;             //二进制1111 1111 1111 1111 1111 1111 1100 0000
          var newValue = oldValue >>>5;   //二进制0000 0111 1111 1111 1111 1111 1111 1110,等于十进制的134217726
      • 布尔操作符

      • 逻辑非(!)
      • 逻辑与(&&)
      • 逻辑或(||)
    • 乘性操作符

      • 乘法(*)
        1. 如果乘积超过数值表示范围,则返回Infinity或-Infinity
        2. 如果有一个操作数是NaN,则结果是NaN
        3. Infinity * 0 = NaN
        4. Infinity * 非0 = Infinity 或 -Infinity(取决于非0数值的符号)
        5. Infinity * Infinity = Infinity
      • 除法(/)
        1. 同乘法
        2. 同乘法
        3. Infinity/Infinity = NaN
        4. 0/0 = NaN
        5. 0/非0有限数 = Infnity 或 -Infinity(取决于数的符号)
        6. 非0/Infinity = Infinity 或 -Infinity(取决于数的符号)
      • 求模(%)
        1. 无穷大%有限大 = NaN
        2. 有限大%0 = NaN
        3. Infinity%Infinity = NaN
        4. X(有限大)%Y(无穷大) = X
        5. 0% 数 = 0
    • 加性操作符

      • 加法

        1. 如果有一个操作数是NaN,则结果是NaN
        2. Infinity + Infinity = Infinity
        3. -Infinity + -Infinity = -Infinity
        4. Infnity + -Infinity = NaN
        5. 如果两个操作数都是字符串(或只有一个是字符串),则拼接
          var result = 5 + "5";   //"55"
      • 减法

        1. 同加法
        2. Infinity - Infinity = NaN
        3. -Infinity - -Infinity = NaN
        4. Infinity - -Infinity = Infinity
        5. -Infinity - Infinity = -Infinity
          var result1 = 5 - true;     //4,true转换成1
          var result2 = NaN - 1;      //NaN
          var result3 = 5 - 3;        //2
          var result4 = 5 - "";       //5,""转换成0
          var result5 = 5 - "2";      //3
          var result6 = 5 - null;     //5,null转换成0
    • 关系操作符

      1.对于字符串,比较的是字符编码

      var result = "Black" < "alphabet";      //true,B-66,a-97
      var result = "23" < "3";                //true,2-50,3-51

      2.对于数值和字符串,如果字符串能转换成数值

      var result = "23" < 3;      //false,"23"被转换成了数值23
      var result = "a" < 3;       //false,因为"a"被转换成了NaN

      3.与NaN作比较,结果都是false

      var result = NaN < 3;           //false
      var result = NaN >= 3;          //false
    • 相等操作符

      • 相等和不相等

        null == undefined;          //true
        null == 0;                  //false
        undefined == 0;             //false
        "NaN" == NaN;               //false
        NaN == NaN;                 //false
        NaN != NaN;                 //false
        5 == NaN;                   //false
        5 == "5";                   //true
        false == 0;                 //true
        true == 1;                  //true
        true == 2;                  //false
      • 全等和不全等

        var result1 = ("55" == 55);     //true,因为转换后相等
        var result2 = ("55" === 55);    //false,因为不同的数据类型不相等
        
        var result1 = ("55" != 55);     //false,因为转换后相等
        var result2 = ("55" !== 55);    //true,因为不同的数据类型不相等
        
        var result1 = (null == undefined);      //true
        var result2 = (null === undefined);     //false
    • 条件操作符

      variable = boolean_expression ? true_value : false_value;
      var max = (num1 > num2)? num1 : num2;
    • 赋值操作符

      • =、+=、-=、*=、/=、%=、<<=、>>=、>>>=
    • 逗号操作符

      • 除基本功能外,它还可用于赋值
        var num = (3,2,5,6,9,0);    //0,返回表达式中的最后一项
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值