JS运算符和表达式

作者: YM雨蒙 | 来源:发表于2017-06-29 22:40 被阅读172次

    操作符

    一元操作符

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

    递增(++)递减(--)操作符,有两个版本:

    • 前置型
      • 执行前置递增和递减操作时,变量的值都在语句被求值以前改变的(这种情况被称为副效应)
    var age = 29;       
    var anotherAge = --age + 2;
    alert(age);         //输出28
    alert(anotherAge);        //输出30
    由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至有被求值,例:
    var num1 = 2;
    var num2 = 20;
    var num3 = --num1 + num2;        //等于21
    var num4 = num1 + num2;        //等于21
    
    • 后置型
      • 后置递增递减语法不变,但区别是:即递增递减操作是在包含它们的语句被求值之后才执行的,例:
    var num1 = 2;
    var num2 = 20;
    var num3 = num1-- + num2;        //等于22
    var num4 = num1 + num2;        //等于21
    
    • 在应用不同的值时,递增递减遵循以下规则:
      • 应用一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减一的操作
      • 应用一个不包含有效数字字符的字符串时,将变量值设为NaN。
      • 应用一个布尔值false或者true时,先将其转换为0或者1,再执行加减一的操作
      • 应用于浮点数时,执行加减一操作
      • 应用于对象,先调用对象的valueOf()方法取得一个可操作的值,然后将该值应用前述规则,如果结果NaN,调用toString()方法
    var s1 = "2";     s1++;    //3
    var s2 = "z";     s2++;    //NaN
    var b = false;    b++;    //1
    var f = 1.1;    f--;    //0.1000000000009(由于浮点舍入错误导致) 
    var o = {
        valueOf: function(){
          return -1;       
        }
    };         o--;      //-2
    

    算数操作符

    乘法

    乘法操作符是由一个(*)表示,用于表示两个数值的乘积处理特殊值,遵循以下规则:

    • 如果操作数都是数值,执行常规乘法计算,如果乘积超过数值的表示范围,用Infinity或-Infinity表示;
    • 如果有一个操作数是NaN,结果是NaN;
    • 如果Infinity与0相乘,结果NaN;
    • 如果Infinity与Infinity相乘,结果是Infinity
    • 如果Infinity与非0数值相乘,结果是Infinity或者-Infinity;
    • 如果有一个操作符不是数值,则调用Number()将其转换为数值。

    除法

    除法操作符有一个(/)表示,例:var result = 66/11; 处理特殊值,遵循以下规则:

    • 如果操作数都是数值,执行常规除法计算,如果商超过数值的表示范围,用Infinity或-Infinity表示;
    • 如果有一个操作数是NaN,结果是NaN;
    • 如果0被0除,结果NaN;
    • 如果Infinity被Infinity除,结果是NaN
    • 如果非零的有限数被零除,结果是Infinity或者-Infinity;
    • 如果Infinity被任何非零数值除,结果是Infinity或者-Infinity;
    • 如果有一个操作符不是数值,则调用Number()将其转换为数值。

    求模

    求模(余数)操作符有一个(%)表示,例:var result = 26 % 5; //等于1,处理特殊值,遵循以下规则:

    • 如果操作数都是数值,执行常规除法计算,返回除得的余数;
    • 如果被除数是无穷大值而除数是有限大的值,结果NaN;
    • 如果被除数是有限大的数值而除数是零,结果NaN;
    • 如果Infinity被Infinity除,结果是NaN;
    • 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数;
    • 如果被除数是零,则结果是零;
    • 如果有一个操作符不是数值,则调用Number()将其转换为数值。

    加性操作符

    加法操作符用(+)表示。 例: var result = 1 + 2; 处理特殊值,遵循以下规则:

    • 如果有一个操作数是NaN,则结果是NaN;
    • 如果是Infinity加Infinity,结果是Infinity;
    • 如果是-Infinity加-Infinity,结果是-Infinity;
    • 如果Infinity加-Infinity,结果是NaN;
    • 如果+0加+0,结果是+0;
    • 如果-0加-0,结果是-0;
    • 如果+0加-0,结果是+0;
    • 不过如果有一个操作符是字符串,则应用以下规则:
      • 如果两个操作数都是字符串,则拼接起来;
      • 如果只有一个操作符是字符串,则将另一个操作符转换为字符串,然后拼接
    • 如果有一个操作数是对象,数值或布尔,则调用它们的toString()方法取得相应的字符串值,然后再应用前面的关于字符串的规则,对于undefined和null,则调用String()函数取得字符串.
    var result = 5 + 5;
    alert(result);      // 10
    var result1 = 5 + "5";
    alert(result1);         // "55"
    

    减法

    减法操作符用(-)表示,var result = 2 - 1;处理特殊值,遵循以下规则:

    • 如果操作数都是数值,执行常规计算,返回结果;
    • 如果有一个操作数是NaN,结果NaN;
    • 如果是 Infinity 减 Infinity,结果是NaN;
    • 如果是 -Infinity 减 -Infinity,结果是NaN;
    • 如果是 Infinity 减 -Infinity,结果是 Infinity;
    • 如果是 -Infinity 减 Infinity,结果是 -Infinity;
    • 如果+0减+0,结果是+0;
    • 如果-0减+0,结果是-0;
    • 如果-0减-0,结果是+0;
    • 如果有一个操作符不是数值,则调用Number()将其转换为数值。在计算
    var result1 = 5 - true ;    // 4 ,因为true转换为1
    var result2 = NaN - 1 ;    // NaN
    var result3 = 5 - "" ;     // 5, 因为""被转换为0
    var result4 = 5 - null ;   // 5,因为null转换为0
    

    关系操作符

    关系操作符用于对两个值得比较,返回时布尔值。包括:小于(<)、大于(>)、大于等于(>=)、小于等于(<=)当关系操作数使用了非数值,遵循以下规则:

    • 如果两个操作符都是字符串,则比较两个字符转对应的字符编码值;
    • 如果一个操作数是数值,将另一个操作数转换为数值,比较;
    • 如果一个操作数是对象,则调用valueOf()方法,如果没有valueOf()方法,调用toString()方法,在比较;
    • 如果一个操作数是布尔,转换为数值,在比较

    相等操作符

    ECMAScript提供两组操作符:相等 和 不相等----先转换再比较,全等 和 不全等----仅比较而不转换

    相等和不相等

    相等操作符有==两个等号表示,返回布尔值,不相等操作符由!=叹号后跟等号组成,这两个操作符先转换再比较(强制转换)转换遵循基本原则:

    • 如果有一个操作符是布尔值,比较前转换为数值0或1
    • 如果一个操作数是字符串,另一个是数值,先将字符串转化为数值再比较
    • 如果一个操作符是对象,另一个不是,则调用对象的valueOf()方法,得到的基本值用前面的规则比较;
      • 两个操作符遵循以下规则:
        • null 和 undefined 是相等的
        • 比较相等性之前,不能将null 和 undefined转换任何值
        • 如果有个操作数是NaN,相等操作符返回false,不相等返回true. NaN不等于NaN
        • 如果两个操作数都是对象,比较它们是不是同一个对象,如果都指向同一个对象,则相等操作符返回true;否则,返回false.

    全等和不全等

    全等操作符由===三个等于号表示,只在两个操作数未经转换就相等的情况下返回true.

    var result1 = ("55" == 55) ;    //true
    var result2 = ("55" === 55) ;    //false
    

    不全等操作符由!==一个感叹号后跟两个等号表示,在两个操作数未经转换就不相等的情况下返回true

    var result1 = ("55" != 55) ;    //false
    var result2 = ("55" !== 55) ;    //true
    

    记住:null == undefined会返回true,因为它们是类似的值,null === undefined会返回false,因为它们不同类型


    布尔操作符

    布尔操作符一共有三个:非(NOT) 与(AND) 或(OR).

    逻辑非

    逻辑非由一个感叹号!表示,返回布尔值,逻辑非操作先将其转化为布尔值,然后取非对其求反.

    • 如果操作数是一个对象,返回false;
    • 如果操作符是一个空字符串,返回true;
    • 如果操作符是一个非空字符串,返回false;
    • 如果操作符是数值0 ,返回true;
    • 如果操作数是任意非0数值(包括Infinity),返回false;
    • 如果操作数是null,返回true;
    • 如果操作数是NaN,返回true;
    • 如果操作数是undefined,返回true;
    alert(!false);    //true
    alert(!"blue");    //false
    alert(!0);    //true
    alert(!NaN);    //true
    alert(!"");    //true
    同时使用两个逻辑非(!!)操作,实际上会模拟Boolean()转型函数的行为
    

    逻辑与

    逻辑与操作符由两个和号&&表示,有两个操作数, 例:var result = true && false;

    第一个操作数 第二个操作数 结果
    true true true
    true false false
    false true false
    false false false

    逻辑与操作可以应用于任何类型的操作数,不仅仅布尔值,其他数值类型,遵循以下规则:

    • 如果第一个操作数是对象,返回第二个操作值;
    • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
    • 如果两个数都是对象,返回第二个操作数;
    • 如果第一个数null, 返回null;
    • 如果第一个操作数是NaN,则返回NaN;
    • 如果第一个操作数是undefined,则返回underfined;

    逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,不会对第二个操作数求值.

    var found = true ;
    var result = ( found && someUndefinedVariable ) ;    //会发生错误,不能使用未定义的值
    alert( result ) ;   //这一行不会执行
    var found = false ;
    var result = ( found && someUndefinedVariable ) ;    //不会发生错误,短路操作
    alert( result ) ;   // 会执行"false"
    

    逻辑或

    逻辑或操作符由两个||两个竖线符号表示,由两个操作符,例:var result = true || false;

    第一个操作数 第二个操作数 结果
    true true true
    true false true
    false true true
    false false false

    与逻辑与操作相似,也遵循类似规则:

    • 如果第一个操作数是对象,返回第一个操作值;
    • 如果第一个操作数的求值结果为false,则返回第二个操作数;
    • 如果两个数都是对象,返回第一个操作数;
    • 如果两个操作数都是null, 返回null;
    • 如果两个操作数都是NaN,则返回NaN;
    • 如果两个操作数都是undefined,则返回underfined;

    逻辑或操作也属于短路操作,即如果第一个操作数为true,不会对第二个操作数求值.

    var found = true ;
    var result = ( found || someUndefinedVariable ) ;    //不会发生错误
     alert( result ) ;   // 会执行"true"
    var found = false ;
    var result = ( found && someUndefinedVariable ) ;    // 会发生错误
    alert( result ) ;   //  不会执行
    

    条件操作符

    语法:variable = boolean_expression ? true_value : false_value;

    var max = ( num1 > num2 ) ? num1 :num2 ;
    表达式意思是:如果num1>num2(表达式返回true),将num1赋值给max;如果false,将num2赋值给max.
    

    赋值操作符

    简单的赋值操作符由等于号=表示,作用是把右边的值赋给左边的量,例:var num = 10;

    • 如果等号前面再加其他操作符,可以完成复合赋值操作,例:
    var num = 10;
    num = num + 10;    ==>    num += 10;
    x += y // 等同于 x = x + y
    x -= y // 等同于 x = x - y
    x *= y // 等同于 x = x * y
    x /= y // 等同于 x = x / y
    x %= y // 等同于 x = x % y
    x >>= y // 等同于 x = x >> y
    x <<= y // 等同于 x = x << y
    x >>>= y // 等同于 x = x >>> y
    x &= y // 等同于 x = x & y
    x |= y // 等同于 x = x | y
    x ^= y // 等同于 x = x ^ y
    

    逗号操作符

    逗号操作符可以在一条语句中执行多个操作,例:var num1 = 1, num2=2, num3=3;

    • 逗号操作符多用于声明多个变量,除此之外,还可以赋值.用于赋值时,逗号操作符总会返回表达式中最后一项
    var num = ( 5 , 1 , 4 , 8 , 0) ;    //num值为0
    虽然不常见,但是这个例子可以理解逗号的这种行为
    

    对象操作符

    • new
      • 可以获取一个对象示例
    • delete
      • 可以删除一个对象的属性
    • .
      • 获取对象属性
    • []
      • 获取对象属性的值
    • instanceof
      • 判断某个变量是否是某个对象的实例
    • in
      • 判断某个属性是否在对象中

    参考

    这些都是一些常见的操作符,好好掌握,嘿嘿,还有 位操作符 还没太熟练,在研究一下,继续努力

    相关文章

      网友评论

        本文标题:JS运算符和表达式

        本文链接:https://www.haomeiwen.com/subject/msaucxtx.html