JavaScript基础运算符

JavaScript基础运算符

几乎所有的编程语言都有各种各样的运算符(也被称之为操作符,operators)

运算符和运算元

运算元

运算元——运算符应用的对象。
✓  比如说乘法运算5 * 2,有两个运算元;
✓  左运算元5 和右运算元2;
✓  有时候人们也称其为“参数”;
如果一个运算符对应的只有一个运算元,那么它是一元运算符.
✓ 比如说一元负号运算符(unary negation)-,它的作用是对数字进行正负转换;
◼ 一元运算符通常我们是使用–和+,-号使用的会较多一些;
如果一个运算符拥有两个运算元,那么它是二元运算符。
✓ 比如2 + 3

算数运算符

 ◼ 算术运算符
  算术运算符用在数学表达式中, 它的使用方式和数学中也是一致的;
  算术运算符是对数据进行计算的符号;

常见算数运算符

    +  加法     
    +  连接字符串
    -  减法
    *  乘法
    /  除法
    %  取余数  var result2 = 20 % 8 结果为余数 4
    ** 幂数(ES7)    2**3  结果为 8  取代之前的Math.pow(2,3)

赋值运算符

  前面我们使用的= 其实也是一个运算符,被称之为赋值(assignments )运算符。
  =:语句x = value 将值value 写入 x 然后返回x。

链式赋值(Chaining assignments

 var num1 = num2 = num3 = 2+2;
 链式赋值从右到左进行计算;
 首先,对最右边的表达式2 + 2 求值,然后将其赋给左边的变量:num3、num2 和num1。
 但是从代码的可读性的角度来说,不推荐这种写法。

原地修改(Modify-in-place)

 我们经常需要对一个变量做运算,并将新的结果存储在同一个变量中.
 例如:
    var num = 100;
    num = num + 10;
    console.log(num)结果:110
   可以使用运算符+= 和*= 来缩写这种表示。
   var n = 10;
   n += 5 -->n = n+5
   n *= 5 -->n = n*5

所有算术和位运算符都有简短的“修改并赋值”运算符:/= 和-= 等。

自增和自减

对一个数进行加一、减一是最常见的数学运算符之一。
所以,对此有一些专门的运算符:
自增++将变量加1;
自减--将变量减1;

!!! 自增和自减只能应用于变量上不能应用在数字上;

++ 和 -- 的位置

  var index = 5;
  // 如果是独立使用时是没有区别的
  ++index;
  console.log(index);
  --index;
  console.log(index);
  // 自增和自减表达式本身又在其他表达式中,那就是有区别的
  // ++在后面的时候被称为"后置形式":先使用变量再自增
  var result1 = 100 + index++;
  console.log(index);
  console.log("result1:"+result1);
  // ++再前面的时候被称为"前置形式":先自增再使用
    var result2 = 100 + ++index ;
    console.log(index);
    console.log("result2:"+result2);

运算符优先级

MDN上给出了所有运算符的优先级:
  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

比较运算符

大于/ 小于:a > b,a < b。
大于等于/ 小于等于:a >= b,a <= b。
检查两个值的相等:a == b,请注意双等号== 表示相等性检查,而单等号a = b 表示赋值。
检查两个值不相等:不相等在数学中的符号是≠,但在JavaScript 中写成a != b

!!!比较运算符的结果都是Boolean类型的

=== 和 == 的区别

  普通的相等性检查== 存在一个问题,它不能区分出0 和false,或者空字符串和false这类运算:
  这是因为在比较不同类型的值时,处于判断符号== 两侧的值会先被转化为数字;
如果我们需要区分0 和false,该怎么办?
  严格相等运算符 === 在进行比较时不会做任何的类型转换;  
  换句话说,如果a 和b 属于不同的数据类型,那么a === b 不会做任何的类型转换而立刻返回false;
同样的,“不相等”符号!= 类似,“严格不相等”表示为!==。

严格相等的运算符虽然写起来稍微长一些,但是它能够很清楚地显示代码意图,降低你犯错的可能性

== 的规则

如果类型相同
Underfined ==  Underfined -->true
  Null == Null --->true
  数字{
    NaN == NaN --->false
    数字==NaN --->false
    1 == 2 -->fales
    1 == 1 -->true

  }
  1 == null --->false
  0 == null --->false
  "" == null -->false

== 补充

  // 让 123 == info返回的结果为true
      var info = {
        name : "why",
        age : 18,
        // []表示是一个计算属性名
        [Symbol.toPrimitive](){
          return 123;
        }
      }
      console.log(123 == info) //true 

三元运算符

◼ 有时我们需要根据一个条件去赋值一个变量。
  比如比较数字大小的时候,获取较大的数字;
  这个时候if else语句就会显得过于臃肿,有没有更加简洁的方法呢?
◼ 条件运算符:’?’
  这个运算符通过问号?表示;
  有时它被称为三元运算符,被称为“三元”是因为该运算符中有三个操作数(运算元);
  实际上它是JavaScript 中唯一一个有这么多操作数的运算符;
◼ 使用格式如下:
  var result = condition ? value1 : value2;
  计算条件结果,如果结果为真,则返回value1,否则返回value2。

逻辑运算符

逻辑运算符,主要是由三个:
    ||(或),&&(与),!(非)
    它可以将多个表达式或者值放到一起来获取到一个最终的结果;

运算规则

  运算符     运算规则           范例              结果
    &&        与: 同时为真      false && True     false
    ||        或: 一个为真       false or frue    true
    !         非: 取反           !false           true
  ◼ 有了逻辑运算符,我们就可以在判断语句中编写多个条件。

逻辑或的本质

   ||(或)两个竖线符号表示“或”运算符(也称为短路或);
      从左到右依次计算运算元。
      处理每一个运算元时,都将其转化为布尔值(Boolean);
   !!!如果结果是true,就停止计算,返回这个运算元的"初始值"。
      如果所有的运算元都被计算过(也就是,转换结果都是false),则返回最后一个运算元。
◼ 注意:返回的值是运算元的初始形式,不会转换为Boolean类型 
换句话说,一个或运算|| 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值

逻辑与的本质

    从左到右依次计算操作数。
    在处理每一个操作数时,都将其转化为布尔值(Boolean);
 !!!如果结果是false,就停止计算,并返回这个操作数的初始值(一般不需要获取到初始值);
    如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数
  换句话说,与运算返回第一个假值,如果没有假值就返回最后一个值

!逻辑非

  <!-- 相同的效果 将变量转化为Boolean类型 -->
    var message = "Hello Word"
    console.log(Boolean(message))
    // 补充用法1
    console.log(!!message)
    // 练习
    var num1 = "";
    console.log(!!num1)
posted @ 2024-10-20 01:58  韩德才  阅读(22)  评论(0编辑  收藏  举报