JavaScript旅途之运算符和判断语句-详细用法(笔记)

第二章

运算符

运算符(operator)也被称为操作符,适用于实现赋值、比较和执行算数运算等功能符号.

Js里的运算符有:
  • 算数运算符

  • 递增和递减运算符

  • 比较运算符

  • 逻辑运算符

  • 赋值运算符


算数运算符

  1. 算数运算符使用的符号,用于执行两个变量或值的算数
运算符描述示例
+1 + 1 = 2
-1 - 1 = 0
*1 * 1 = 1
/10 / 20 = 0.5
%取模(取余)9 % 2 = 1
//练习
<script>
    console.log(1+1);//2
    console.log(1-1);//0
    console.log(1*1);//1
    console.log(10/20);//0.5
    console.log(9%2);//1
    console.log(0.1+0.2);//0.30000000000000004
    console.log(0.1+0.2==0.3);//false
    //所以对比出来的结果是false,0.1+0.2的结果并不是0.3
</script>
知识扩展
浮点数值的精度问题
浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数,而且浮点数值的精确度会随着计算的进行而降低,所以永远不要测试某个特定的浮点数值

表达式和返回值

表达式是由操作符和操作数组成的,而表达式的值则是运算后得到的值,称为返回值.简单来说就是由数字,字符串或者变量等组成的简单表达式.



递增和递减运算符

  • 概述

    如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减(–) 运算符来完成.

    递增运算符由两个加号(++)表示,递减运算符由两个减号(–)表示.
    递增运算符和递减运算符都是单目运算符,即只能操作一个值

    递增运算符和递减运算符可以放在包含它们的语句之前(前置递增/递减运算符)或之后(后置递增/递减运算符)

前置递增递减
//++num前置递增,自加1,与表达式num+1类似,++num写起来方便些
var num = 1;
nmu = ++num;//再加1
console.log(num);//2
var a = 1;
console.log(++a + num);//a先加1,再加num
//小结:先自加(减),后返回值
后置递增递减
//后置递减
var num = 1;//定义一个变量
var num1 = num++ + 1;//先将num的值赋值给num1,然后num的值加1
console.log(num);//2
console.log(num1);//2 首先num把自己的值返回1,然后num的值加1

总结

自增(++)和自减(–)运算符在编程中经常使用,它们分为前置和后置两种形式。下面是一个简单的口诀

前置加加,先加后用;后置加加,先用后加。

前置减减,先减后用;后置减减,先用后减。

  1. 前置自增(++variable):首先将变量的值增加 1,然后返回新值。
  2. 后置自增(variable++):首先返回变量的值,然后将变量的值增加 1。
  3. 前置自减(–variable):首先将变量的值减少 1,然后返回新值。
  4. 后置自减(variable–):首先返回变量的值,然后将变量的值减少 1。

举个例子:

let num = 1;

let preIncrement = ++num; // num = 2, preIncrement = 2
let postIncrement = num++; // num = 3, postIncrement = 2

let preDecrement = --num; // num = 2, preDecrement = 2
let postDecrement = num--; // num = 1, postDecrement = 2

以下是三道关于自增和自减运算符的练习题。

练习 1:

let a = 5;
let b = a++ * 2;

在执行完这段代码后,ab 的值分别是多少?

练习 2:

let x = 10;
let y = --x + 3;

在执行完这段代码后,xy 的值分别是多少?

练习 3:

let m = 3;
let n = 4;
let result = ++m + n--;

在执行完这段代码后,mnresult 的值分别是多少?

递增和递减运算符

  • 概念:比较运算符用于比较两个值,并返回一个布尔值,比较运算符包括小于<,大于>,小于等于<=,大于等于>=,等于==,不等于!=,全等===,不全等!==
比较运算符符号示例结果
等于==5 == 5true
不等于!=5 != 3true
大于>5 > 3true
小于<5 < 3false
大于等于>=5 >= 5true
小于等于<=5 <= 3false
严格等于===5 === '5'false
严格不等于!==5 !== '5'true

比较规则

1.如果两个操作数都是数值,则执行数值比较


2.如果两个操作数都是字符串,则比较两个字符串对应的字符编码值


3.如果一个操作数是数值,则将另一个操作数转换为数值,然后执行数值比较


4.如果一个操作数是对象,则调用对象的valueOf()方法,用得到的结果按照前面的规则执行比较,如果对象没有valueOf()方法,则调用toString()方法,用得到的结果按照前面的规则执行比较


5.如果一个操作数是布尔值,则将其转换为数值,然后执行比较


6.如果一个操作数是null或undefined,则将其转换为0,然后执行比较


7.如果一个操作数是NaN,则返回false


8.如果两个操作数都是对象,则比较两个对象的引用

//比较规则如上,操作数会字形转换
console.log(1<2);//true
console.log(1>2);//false
console.log(1<=2);//true
console.log(1>=2);//false
console.log(1==2);//false
console.log(1!=2);//true
console.log(1===2);//false
console.log(1!==2);//true
console.log(1===1);//true 
console.log(1==='1');//false 检查类型和值是否相等
console.log('小明'=='小红');//false
console.log('小红'=='小红');//true
console.log(1>"2");//false
console.log(1<true);//false
console.log(1>false);//true
console.log(1<false);//false

=的小结

运算符符号描述示例结果
赋值=将右操作数的值赋给左操作数var a = 5将 5 赋值给 a
等于==检查两个操作数是否相等,如果相等则返回 true5 == '5'true
严格等于===检查两个操作数是否完全相等(类型和值),如果相等则返回 true5 === '5'false

逻辑运算符

  • 概念

    是用来判断两个表达式的逻辑关系,逻辑运算符包括与&&,或||,非!,三种逻辑运算符的运算结果都是布尔值,逻辑运算符的运算规则如下:

    运算符描述示例结果
    &&逻辑与,简称"与" and5 > 3 && 2 < 4true
    ||逻辑或,简称"或" or5 > 3 || 2 > 4true
    !逻辑非,简称"非" not!(5 > 3)false
    console.log(3>6 && 2<4);//false 两个都为true才为true
    console.log(3>6 || 2<4);//true 只要有一个为true就为true
    console.log(!(3>6));//true 取反
    console.log(!(3<6 && 2<4));//true取反为false
    console.log(!(3>6 || 2>4));//false取反为true
    

位运算符(目前了解即可)

  • 概念

    位运算符是将数字转换为32位整数,然后对整数进行运算,最后将结果转换为数字,位运算符包括按位与&,按位或|,按位异或^,按位非~,左移<<,右移>>,无符号右移>>>,位运算符的运算规则如下:

    运算符描述示例结果
    &按位与5 & 11
    |按位或5 | 15
    ^按位异或5 ^ 14
    ~按位非~5-6
    <<左移5 << 110
    >>右移5 >> 12
    >>>无符号右移5 >>> 12
    console.log(5 & 1);//1
    console.log(5 | 1);//5
    console.log(5 ^ 1);//4
    console.log(~5);//-
    

逻辑中断逻辑与和逻辑或

  • 短路运算(逻辑中断)

短路运算的原理:
当有多个表达式(值)时,会从左到右依次判断,如果能够判断出结果,则不再继续判断,直接返回结果,这种现象称为短路运算(逻辑中断)

  • 逻辑与&&
//逻辑与短路运算
//如果表达式1的值为true,则返回表达式2的值,如果表达式1的值为false,则返回表达式1的值
console.log(1&&2);//2 1为true,返回2
console.log(0&&2);//0 0为false,返回0
console.log(1&&0);//0 0为false,返回0
console.log(123&&456);//456 456为true,返回456
console.log(''&&456);//'' ''为false,返回''
  • 逻辑或||
//逻辑或短路运算
//如果表达式1的值为true,则返回表达式1的值,如果表达式1的值为false,则返回表达式2的值
console.log(1||2);//1 1为true,返回1
console.log(0||2);//2 0为false,返回2
console.log(1||0);//1 1为true,返回1
console.log(123||456);//123 123为true,返回123
console.log(''||456);//456 ''为false,返回456
//小练
var a = 1;
console.log(123 || a++);//123
console.log(a);//1

赋值运算符

  • 概念

赋值运算符是将右边的值赋值给左边的变量,赋值运算符包括=,+=,-=,*=,/=,%=,<<=,>>=,>>>=,&=,|=,^=,赋值运算符的运算规则如下:

运算符描述示例结果
=赋值var a = 11
+=加后赋值var a = 1;a += 23
-=减后赋值var a = 1;a -= 2-1
*=乘后赋值var a = 1;a *= 22
/=除后赋值var a = 1;a /= 20.5
%=取模后赋值var a = 1;a %= 21
<<=左移后赋值(了解即可)var a = 1;a <<= 24
>>=无符号右移后赋值(了解即可)var a = 1;a >>>= 20
&=按位与后赋值(了解即可)var a = 1;a &= 20
      var a = 1;
      a += 2;
      console.log(a);//3
      a -= 2;
      console.log(a);//1
      a *= 2;
      console.log(a);//2
      a /= 2;
      console.log(a);//1
      a %= 2;
      console.log(a);//1
      a <<= 2;
      console.log(a);//4 
      a >>>= 2;
      console.log(a);//1 
      a &= 2;
      console.log(a);//0

运算符优先级

  • 概念

    运算符优先级是指多个运算符同时出现时,先执行哪个运算符,运算符优先级的规则如下:

    优先级运算符顺序
    1括号 ()从左到右
    2一元运算符++ -- !
    3算数运算符先* / %后+ -
    4关系运算符>= > < <=
    5相等运算符== != === !==
    6逻辑运算符先&& 后||
    7赋值运算符=
    8逗号运算符,
  • 一元运算符逻辑非优先级比较高

  • 逻辑与比逻辑或优先级高



流程控制分支结构

流程控制

  • 概念

    流程控制是指程序的执行顺序,流程控制分为顺序结构、分支结构、循环结构,顺序结构是指程序按照代码的先后顺序执行,分支结构是指程序按照条件的不同执行不同的代码,循环结构是指程序按照条件的不同重复执行相同的代码。

  • 分类

    流程控制分为顺序结构、分支结构、循环结构,顺序结构是指程序按照代码的先后顺序执行,分支结构是指程序按照条件的不同执行不同的代码,循环结构是指程序按照条件的不同重复执行相同的代码。

顺序结构

  • 概念

    顺序结构是指程序按照代码的先后顺序执行,顺序结构是程序的默认结构,不需要任何关键字。

分支结构

  • 概念

    分支结构是指程序按照条件的不同执行不同的代码,分支结构分为单分支结构和双分支结构,单分支结构是指程序按照条件的不同执行不同的代码,双分支结构是指程序按照条件的不同执行不同的代码,分支结构的关键字为if、else、switch。

1.if语句(单分支语句)

  • 概念

    if语句是指程序按照条件的不同执行不同的代码,if语句的语法如下:

    if(条件){
      执行语句
    }
    

    执行思路:如果条件为true则执行if语句中的代码,如果条件为false则不执行if语句中的代码。

  • 示例

      var a = 1;
      if(a == 1){
        console.log("a等于1");
      }
    
  • 注意

if语句的条件为布尔值,如果条件为true则执行if语句中的代码,如果条件为false则不执行if语句中的代码,if语句中的代码只有一行时可以省略大括号,但是不建议省略大括号,因为省略大括号会造成代码的可读性差,容易出错。

//练习:弹出输入框,输入一个数字,如果数字大于10则弹出“数字大于10”,如果数字小于10则弹出“数字小于10”,如果数字等于10则弹出“数字等于10”。
var a = prompt("请输入一个数字");
if(a>10){
    alert("大于10");
}if(a<10){
    alert("小于10");
}
if(a==10){
    alert("等于10");
}

2.if…else语句(双分支语句)

  • 概念

    if…else语句是指程序按照条件的不同执行不同的代码,if…else语句的语法如下:

    if(条件){
      执行语句1
    }else{
      执行语句2
    }
    

    执行思路:如果条件为true则执行if语句中的代码,如果条件为false则执行else语句中的代码。

  • 示例

      var a = 1;
      if(a == 1){
        console.log("a等于1");
      }else{
        console.log("a不等于1");
      }
    
  • 注意

if…else语句的条件为布尔值,如果条件为true则执行if语句中的代码,如果条件为false则执行else语句中的代码,if…else语句中的代码只有一行时可以省略大括号,但是不建议省略大括号,因为省略大括号会造成代码的可读性差,容易出错。

//练习:弹出输入框,输入一个数字,如果数字大于10则弹出“数字大于10”,如果数字小于10则弹出“数字小于10”。

var a = prompt("请输入一个数字");
if(a>10){
    alert("大于10");
}else{
    alert("小于10");
}
  • 练习
var a = prompt("请输入年份");
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0){
    alert("闰年");
}else{
    alert("平年");
}

3.if…else if…else语句(多分支语句)

  • 概念

    if…else if…else语句是指程序按照条件的不同执行不同的代码,if…else if…else语句的语法如下:

    if(条件1){
      执行语句1
    }else if(条件2){
      执行语句2
    }else if(条件3){
      执行语句3
    }else{
      执行语句4
    }
    

    执行思路:如果条件1为true则执行if语句中的代码,如果条件1为false则判断条件2,如果条件2为true则执行else if语句中的代码,如果条件2为false则判断条件3,如果条件3为true则执行else if语句中的代码,如果条件3为false则执行else语句中的代码。

  • 示例

      var a = 1;
      if(a == 1){
        console.log("a等于1");
      }else if(a == 2){
        console.log("a等于2");
      }else if(a == 3){
        console.log("a等于3");
      }else{
        console.log("a不等于1、2、3");
      }
    
  • 注意

if…else if…else语句的条件为布尔值,如果条件1为true则执行if语句中的代码,如果条件1为false则判断条件2,如果条件2为true则执行else if语句中的代码,如果条件2为false则判断条件3,如果条件3为true则执行else if语句中的代码,如果条件3为false则执行else语句中的代码,if…else if…else语句中的代码只有一行时可以省略大括号,但是不建议省略大括号,因为省略大括号会造成代码的可读性差,容易出错。

    //练习:接收用户输入的分数,根据分数给出到对应的等级,分别是:90以上为A,80-89为B,70-79为C,60-69为D,60以下为不及格。
var c = prompt('请输入成绩');
if(c>=90){
    alert("A");
}else if(c>=80&&c<90){
    alert("B");
}else if(c>=70&&c<80){
    alert("C");
}
else if(c>=60&&c<70){
    alert("D");
}
else{
    alert("不及格");
}

三元表达式

  • 概念

    三元表达式是由三个表达式组成的运算符,三元表达式的运算规则如下:

    运算符描述示例结果
    ?三元表达式5 > 3 ? 1 : 01
    //语法:条件表达式 ? 表达式1 : 表达式2
    //根据条件表达式的结果,来决定返回表达式1的值还是表达式2的值
    console.log(5 > 3 ? 1 : 0);//1
    console.log(5 < 3 ? 1 : 0);//0
    
    
    //练习:用户输入数值,如果数值小于10,则在前面补0,否则不补0
      var a = prompt("请输入一个数值");
      a < 10 ? a = "0" + a : a = a;
      alert(a);
      console.log(a < 10 ? '0'+ a : '大于10了' );
    
    

switch语句

  • 概念

switch语句是指程序按照条件的不同执行不同的代码,switch语句的语法如下:

  switch(条件){
    case 值1:
      执行语句1
      break;
    case 值2:
      执行语句2
      break;
    case 值3:
      执行语句3
      break;
    default:
      执行语句4
  }

执行思路:如果条件等于值1则执行case值1中的代码,如果条件等于值2则执行case值2中的代码,如果条件等于值3则执行case值3中的代码,如果条件不等于值1、值2、值3则执行default中的代码。

  • 示例

      var a = prompt("请输入一个数字");
      a = parseInt(a);//将字符串转换为数字
      switch(a){
        case 1:
          console.log("a等于1");
          break;
        case 2:
          console.log("a等于2");
          break;
        case 3:
          console.log("a等于3");
          break;
        default:
          console.log("a不等于1、2、3");
      }
    
  • 注意

switch语句中的条件为数值,数据类型必须相同且每一次判断时都要加上break,否则会造成程序的错误,switch语句中的代码只有一行时可以省略大括号,但是不建议省略大括号,因为省略大括号会造成代码的可读性差,容易出错。

//练习

    var a = prompt("请输入一个水果");
    switch(a){
      case "苹果":
        alert("苹果");
        console.log("苹果");
        break;
      case "香蕉":
        alert("香蕉");
        console.log("香蕉");
        break;
      case "橘子":
        alert("橘子");
        console.log("橘子");
        break;
      default:
        alert("不是水果");
        console.log("不是水果");
    }

ifelseif和switch区别

  • ifelseif和switch都是多分支语句,都可以根据条件的不同执行不同的代码,但是ifelseif和switch的区别如下:

    1. if-else if 语句适合判断连续范围的条件,switch-case 适合判断离散的条件。

例如:

// if-else if 适用
if (age > 0 && age < 18) {
    // ...
} else if (age >= 18 && age < 60) {
    // ...
} else {
    // ... 
}

// switch-case 适用  
switch (color) {
  case "red": 
    // ... 
    break;
  case "blue":
    // ...
    break;
  default:
    // ...
} 
  1. if-else if 语句可以判断复杂的逻辑条件,switch-case 只能判断是否相等。

例如:

// if-else if 可以判断
if (age > 0 && age < 18) {
  // ...
}  

// switch-case 只能判断相等
switch (age) {
  case 18: 
    // ...
    break;  
} 
  1. if-else if 语句没有 break,会执行所有的语句,switch-case 需要 break 否则会继续执行下一个 case。

  2. if-else if 语句可以判断NaN或undefined,switch-case 会报错。

所以总结来说:

  • 如果需要判断连续范围或复杂条件,if-else if 更合适。
  • 如果只是判断几个离散值的相等,且值只能是整数或字符串,switch-case 更简洁。
  • 如果值可能是NaN或undefined,只能使用if-else if。

if-else if 语句更通用,switch-case 语句在某些情况下更高效、简洁,所以可以根据需求灵活选择。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值