day02 JS运算符和逻辑分支

95 阅读5分钟

JS运算符

1.一元运算符

只能操作一个值的运算符叫做一元运算符
var a = ++b;  // 先运算,后赋值
var a = b++;  // 先取值,后运算
其他类型应用一元运算符的规则
var b = '89'; 
b++; //90,数字字符自动转换成数值
var b= 'ab'; 
b++; //NaN,字符串包含非数值转成NaN
var b = false;
b++; //1,false转成数值0,累加就是1
var b = 2.3; 
b++; //3.3,直接加1

2.关系运算符

关系运算符
用于进行比较的运算符称作为关系运算符. 关系运算符有:  小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、
相等(==)、不等(!=)、全等(恒等)(===)、不全等(不恒等)(!==)
关系运算符的比较规则:
 1,  数字和数字比较, 直接比较大小
 2,  数字和字符串比较, 字符串转换为数字后再比较
 3,  字符串和字符串比较, 进行字符的ASCII码值比较
比较注意事项:
 1, 布尔值 ture=1, false=0
 2, 只要不等于NaN, 就是true,其他有NaN的运算都为false
 3, 如果要恒等, 则必须值和类型都要相等;
关系运算符 (特殊值)

image.png image.png

3.逻辑运算符

逻辑运算符通常用于布尔值的操作,一般和关系运算符配合使用,有三个逻辑运算符: 逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)
逻辑与&&运算符属于短路操作,顾名思义,如果第一个操作数返回是 false,第二个数不管是true还是false都会返回false。
逻辑或||运算符也是短路操作。当第一操作数的求值结果为 true, 就不会对第二个操作数求值了。

逻辑非(NOT):! 
逻辑非运算符可以用于任何值。无论这个值是什么数据类型,这个运算符都会返回一个 布尔值。它的流程是:先将这个值转换成布尔值,然后取反,规则如下:
    操作数是一个空字符串, 返回true;   非空字符串, 返回false 
    操作数是数值0, 返回true;   任意非0数值(包括 Infinity),返回false
    操作数是NaN,  返回true
    操作数是undefined,  返回true

4. 表达式的概念:

由运算符和操作数(变量或常量)组成的式子
算术运算符组成的式子叫算术表达式,  如:2+3;
关系运算符组成的式子叫关系表达式或者条件表达式, 如:a>5;
逻辑运算符组成的式子叫做逻辑表达式, 如:a&&b

5. 赋值运算符:

 赋值运算符用等于号(=)表示,就是把右边的值赋给左边的变量。
 复合赋值运算符通过 x=的形式表示,x 表示算术运算符。
     如: +=, -=, *=,  /=, %=等
     

6.三目运算符(三元)

  语法
  表达式 ? 条件1:条件2

  1==1? true:false;
  var num = 10;
  var res = num < 5 ? "大于5" : '小于5';
  console.log(res);

7。短路运算符

  1.短路运算符 || 或
  只找"真",找到真的就不往后面执行
  && 和 ||
  console.log("想睡觉到的..草有1米高");
  true || num;
  console.log("不想睡觉到的..工资有1万");


  2.短路运算符 && 与
  只找假,找到假,就不往后面执行

  true && true && num// 会报错 下面不执行 num未定义
  true && false && num// 不会报错 下面执行
  console.log("11111");
  && 找到假
  || 找到真
  true --> 1
  false--> 0
  var num1 = 1 && 2;   //0和NaN为false,非0为true
  var num2 = true || false;
                 2     1
  var result = num1 * num2 + 3
  console.log(result); // 5

8.位移运算符

  >> 向右移  << 向左移
  2  2  把第12,转换成2进制,再向左边或右边移动n位, n:就是第2个数
  2   3
  2   5
  2 ---> 二进制的数     000010

运算符优先级

image.png

逻辑分支IF

程序的三大流程控制: 
我们的计算机在执行一个程序的时候,最基本的方式是一条语句接一条语句的执行。但不可能所有的问题都能用顺序执行方式就能解决,总会有一些跳转。
采用结构化的程序设计,可以大大提高开发程序的速度、提高程序的可读性、程序运行的速度和效率。
结构化程序是由若干个基本结构组合而成,每一个结构可以包含若干条语句和其它基本结构。共有三种基本结构: 
    顺序:从上朝下执行的代码就是顺序
    分支(选择):根据不同的情况,执行对应代码
    循环:重复做一件事情

1.IF单分支

if条件判断语句的写法: 
   if (表达式){
        执行语句
   }
当括号内的表达式结果成立(为true时),则执行大括号内的语句,否则不执行。

注意:
1. if后面的()不能省略。
2. 一条执行语句可以省略{}, 多条时不能省略{}, 建议不管是一条还是多条都写上{}

2. IF双分支语句

if双分支语句的写法: 
    if(表达式){
        执行语句1
    }else{
        执行语句2
    }
当if括号内的表达式结果成立,进入执行语句1,否则进入执行语句2;


Math.random()  0~1 包含0,不包含1
1、判断一个数是偶数还是奇数;
0~9 包含0,也包含9

3. IF多分支语句

if多分支语句的写法: 
    if(表达式){
        执行语句1
    } else if(表达式2){
        执行语句2
    }else if(表达式3){
        执行语句3
    }
    ...
    else{
        执行语句n
    }
 从上往下,满足哪个条件就执行其相对应的语句,都不满足时,执行最后的else的语句,只能进入其中之一。

4. IF的嵌套

将整个if语句块插入另一个if语句块中
 if (表达式1) {
         if (表达式2){
             if (表达式3){
                   语句;
             } else{
                   语句;
             }
         } else{
              语句;
         }
 }
注意: 嵌套if时, 内层的每一对if-else代码要缩进且对齐;编写代码时,else要与最近的if配对。

逻辑分支Switch

Switch语句的写法: 
switch(表达式) {
     case 常量1: 语句; break;
     case 常量2: 语句; break;
        …
     case 常量n: 语句; break;
     default:语句; break;
}
表达式的结果等于哪个case的常量,则执行其后的语句,执行完break就跳出switch结构,都不满足则执行default的语句。
break的作用:是跳出switch结构,如果没有break,则继续执行下面分支的的语句(而不进行判断)。
注意case穿透,要加break
switch的应用场景: 表达式为固定值, 不能判断范围