JS基本概念 -- 操作符 -- 一元操作符

ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加减)、位操作符、关系操作符、相等操作符。ECMAScript操作符能够适用于很多值,例如字符串、数字值、布尔值甚至对象。不过在应用于对象时,相应的操作符通常会调用对象的valueOf() toString()方法,以便取得可操作的值。

1. 一元操作符

只能操作一个值的操作符叫做一元操作符。

  • 递增和递减操作符
    • 前置型
      //1. 前置递增操作
      var age = 29;
      alert(++age);    //30
      /*
       * 在这个例子中,前置递增操作符把age的值变成了30,
       * 实际上,执行这个前置递增操作与执行以下操作的效果相同
       */
      var age = 29;
      age = age + 1;
      
      
      //2. 前置递减操作
      var age = 29;
      alert(--age);    //28
      /*
       * 在这个例子中,前置递减操作符把age的值变成了28,
       * 实际上,执行这个前置递减操作与执行以下操作的效果相同
       */
      var age = 29;
      age = age - 1;

      执行前置递增和递减操作符时,变量的值都是在语句被求值以前改变的。

      //前置递增和递减操作 与执行语句的优先级相等,因此整个语句从左至右被求值
      var age = 29;
      var anotherAge = --age +2;
      
      alert(age);    //28
      alert(anotherAge);//30
      
      var num1 = 2;
      var num2 = 20;
      var num3 = --num1 + num2;
      var num4 = num1 + num2;
      
      alert(num3);    //21
      alert(num4);    //21
    • 后置型:递增和递减操作是在包含他们的语句被求值之后执行的
      var age = 29;
      alert(age++);    //29
      
      /*
       * 把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作
       * 但当语句中还包含其他操作符时,上述区别就会非常明显了
       */
      var num1 = 2;
      var num2 = 20;
      var num3 = num1-- + num2;
      var num4 = num1 + num2;
      
      alert(num3);    //22
      alert(num4);    //21

      这四个操作符不仅适用于整数,还可以用于字符串、布尔值、浮点数和对象。在应用于不同值时,递增和递减操作符遵循下列规则。

      //1. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字,在执行加减1的操作,字符串变量变成数值变量
      var str1 = "123";
      alert(++str1);    //124
      
      var str2 = "0xa";    
      alert(++str2);    //11 可以识别十六进制数
      
      var str3 = "070";
      alert(++str3);    //71
      
      
      //2.在应用于一个不包含有效数字字符的字符串时,将变量值设置为NaN。字符串变量变成数值变量
      var str1 = "123ab";
      alert(++str1);    //NaN
      
      var str2 = "ab123";
      alert(++str2);    //NaN
      
      var str3 = "chen";
      alert(++str3);    //NaN
      
      
      //3.在应用于Boolean时,false转换成0,true转换成1,在执行加减1操作。布尔变量变成数值变量
      var b1 = false;
      alert(++b1);    //1
      
      var b2 = true;
      alert(++b2);    //2
      
      //4.在应用于浮点数值时,执行加减1操作
      var f = 1.1;
      alert(--f);    //0.10000000000000009(由于浮点舍入错误所致)
      
      
      /*
       *5.在应用于对象时,先调用对象的valueOf()方法,以取得一个可供操作的值,
       *  然后对改值应用前述规则。
       *  如果结果是NaN,则调用toString()方法后再应用前述规则。
       *  
       */
      var o = {
          valueOf: function(){
              return -1;
          }
      };
      
      alert(--o);    //-2
      alert(typeof o);//number
  • 一元加和减操作符
    • 一元加操作符以一个加号(+)表示,放在数值的前面,对数值不会产生任何影响。在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
      var num = 25;
      num = +num;
      alert(num);    //25
      
      var s1 = "01";
      alert(+s1);    //1   值变成数值1
      alert(typeof s1);//string
      alert(typeof +s1);//number
      
      var s2 = "1.1";
      alert(+s2);    //值变成数值1.1
      
      var s3 = "z";
      alert(+s3);    //值变成NaN
      
      var b = false;
      alert(+b);    //值变成数值0
      
      var f = 1.1;
      alert(+f);    //    1.1  值未变
      
      var o = {
          valueOf: function(){
              return -1;
          }
      }
      alert(+o);    //值变成数值-1
    • 一元减操作符主要用于表示负数。在用于非数值时,遵循与一元加操作符相同的规则。
      var num = 22;
      num = -num;
      alert(num);    //-22
      
      var s1 = "01";
      alert(-s1);    //值变成了数值-1
      
      var s2 = "1.1";
      alert(-s2);    //值变成了数值-1.1
      
      var s3 = "cc";
      alert(-s3);    //值变成了NaN
      
      var f = 1.1;
      alert(-f);    //变成了-1.1
      
      var b = true;
      alert(-b)    //值变成了-1
      
      var o ={
          valueOf: function(){
              return -1;
          }
      }
      alert(-o);//值变成了数值1
原文地址:https://www.cnblogs.com/PrajnaParamita/p/5829713.html