zoukankan      html  css  js  c++  java
  • JavaScript 运算符(Operator)

    一、算数运算符

      1、加法(+)

        表示操作数相加;

         处理特殊值规则:

      •  如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;
      •    如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
      •    如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。
      •    对于 undefined null,则分别调用 String()函数并取得字符串"undefined""null"

      2、减法(-)

         表示操作数相减;

        处理特殊值规则:

      •  如果有一个操作数是 NaN,则结果是 NaN
      •     如果是 Infinity Infinity,则结果是 NaN;(同理:如果是-Infinity -Infinity,则结果是 NaN;
      •     如果是 Infinity -Infinity,则结果是 Infinity;(同理:如果是-Infinity Infinity,则结果是-Infinity;
      •     如果有一个操作数是字符串、布尔值、 null undefined,则先在后台调用 Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN,则减法的结果就是 NaN
      •     如果有一个操作数是对象,则调用对象的 valueOf()方法以取得表示该对象的数值。如果得到的值是 NaN,则减法的结果就是 NaN。如果对象没有 valueOf()方法,则调用其 toString()方法并将得到的字符串转换为数值。

      3、乘法(*)

        表示两个数的乘积;

        处理特殊值的规则:

      •  如果操作数都是数值,执行常规的乘法计算,但是乘积如果超出了 ECMAScript 的范围,则返回 Infinity -Infinity
      •    如果有一个操作数是 NaN,则结果是 NaN
      •    如果是 Infinity 0 相乘,则结果是 NaN
      •    如果是 Infinity 与非 0 数值相乘,则结果是 Infinity -Infinity,取决于有符号操作数的符号;
      •    如果是 Infinity Infinity 相乘,则结果是 Infinity
      •    如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则

      4、除法(/)

        表示第二个操作数除第一个操作数。

       处理特殊值的规则:

      •   如果操作数都是数值,执行常规的除法计算,但是商如果超出了 ECMAScript 的范围,则返回 Infinity -Infinity
      •      如果有一个操作数是 NaN,则结果是 NaN
      •      如果是 Infinity Infinity 除,则结果是 NaN
      •      如果是零被零除,则结果是 NaN
      •      如果是非零的有限数被零除,则结果是 Infinity -Infinity,取决于有符号操作数的符号;
      •      如果是 Infinity 被任何非零数值除,则结果是 Infinity -Infinity,取决于有符号操作数的符号;
      •      如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则。

      5、求模(%)

          该操作符表示求余数。

         处理特殊值的规则:

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

    二、一元运算符

      1、自加(++):自身加1

        前置++:++变量名;参与运算时,先自身加1,再参与运算。

        后置++:变量名++;参与运算时,自身先参与运算,然后再自身加1。

      2、自减(- -):自身减1

        前置 --:- -变量名;参与运算时,先自身减1,再参与运算;

        后置 --:变量名- -;参与运算时,先自身参与运算,然后再自身减1;

      注意:操作符对任何值都适用,也就是它们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于非整数的时候,先把对象的类型转化为整数再进行计算。 

    三、逻辑运算符

      1、逻辑与(&&)

        真值表:

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

          分为两种情况:

    第一种: 当表达式全为真的时候。 返回最后一个表达式的值。
    第二种: 当表达式中, 有一个为假的时候。 返回第一个为假的表达式的值

        逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时,它遵循下列规则:

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

       注意逻辑与存在短路运算,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。

          对于逻辑与操作而言,如果第一个操作数是 false,则无论第二个操作数是什么值,结果都不再可能是true 了。

      2、逻辑或(||)

        真值表:

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

       分两种情况:

    第一种情况: 当表达式全为假时, 返回最后一个表达式的值
    第二种情况: 只要有一个表达式为真。 就会把回第一个为真的表达式的值

       与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:

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

       注意与逻辑与操作符相似,逻辑或操作符也是短路操作符。也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。

      3、逻辑非( ! )

        无论这个值是什么数据类型,这个操作符都会返回一个布尔值。

        逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。

        规则:对 true 取反为 false,对 false 取反为 true。

      注意对于 0、null、undefined、""(空串) 都认为是 false。

    四、关系运算符(比较运算符)

      1、相等操作符

        相等操作符由两个等于号( ==)表示,如果两个操作数相等,则返回 true

        不相等操作符由叹号后跟等于号( !=)表示,如果两个操作数不相等,则返回 true

        注意:比较的是两个值是否相等。

        处理特殊值规则:

      •   如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
      •          null undefined 是相等的。
      •          要比较相等性之前,不能将 null undefined 转换成其他任何值。
      •          如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false
        注意:NaN 与任何都不相等,包括它自身。      

      2、全等与不全等

        全等操作符由3个等号(===)表示,它只在两个操作数未经转换就相等的情况下返回 true ;

        不全等操作符由 (!==)表示,它在两个操作数未经转换就不相等的情况下返回 true

        注意:全等和不全等即比较类型也比较值。

        Tips: null == undefined 会返回 true,因为它们是类似的值;但 null === undefined 会返回 false,因为它们是不同类型的值。

      3、关系操作符

        小于(<)、大于(>)、小于等于(<=)和大于等于(>=)  这几个关系运算符对两个值进行比较,都返回一个布尔值。

       处理特殊值规则:

      •   如果两个操作数都是数值,则执行数值比较。
      •     如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
      •     如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较 。
      •     如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面的规则执行比较。
      •     如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

    五、赋值运算符

       简单的赋值操作符由等于号( =)表示,其作用就是把右侧的值赋给左侧的变量;

        如果在等于号( =)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。
        这种复合赋值操作相当于是对下面常规表达式的简写形式:

        Demo:

    var num = 10;
    num = num + 10;      // 等价于 num += 10;
    

        其他的复合赋值操作符还有:*=、/=、%=、+=、-=。

    六、条件操作符(三元运算符)

       语法格式:

    表达式? value1 : value2;
    

        如果表达式值为 true,取 value1的值;如果表达式为 false ,取 value2 的值。(等价于 if...else 语句)

    七、运算符的优先级

      优先级从高到低

        1、 () 优先级最高
        2、 一元运算符 ++ -- !
        3、 算数运算符 先* / % 后 + -
        4、 关系运算符 > >= < <=
        5、 相等运算符 == != === !==
        6、 逻辑运算符 先&& 后||
        7、 赋值运算符

        

  • 相关阅读:
    MessageDigest类提供MD5或SHA等加密算法
    23种设计模式之策略设计模式
    n & (n-1)
    ubuntu 常用软件配置
    minicom 没有tx 信号
    usb 驱动
    全局变量的危害
    编写安全代码:小心volatile的原子性误解
    ADB Server Didn’t ACK ,failed to Start Daemon 解决方法
    字长
  • 原文地址:https://www.cnblogs.com/niujifei/p/11299096.html
Copyright © 2011-2022 走看看