JavaScript自学Day2-分支结构

47 阅读6分钟

日期:2023-03-24 学习目标:流程控制

运算符

概述

操作符和操作数 操作符:运算符,参与运算的符号,操作符不一定只有一个符号 操作数:参与运算的数据,也称之为“元”

一些常见操作符

  1. =:赋值符号,将右边的数据赋值给左边
  2. .: 访问符号,用于访问对象的属性
  3. []:访问符号,用于访问对象的属性
  4. ():函数调用

运算符的分类

  1. 按照操作数的数量区分: 一元运算符:.()[]正号(+)负号(-)非(!) 二元运算符:加(+)减(-) 乘(*) 除(/) 取余(%) 赋值(=) 三元运算符:条件运算符 条件 ? 表达式1 : 表达式2
  2. 按照功能区分: 算术运算符(数学) 比较运算符 逻辑运算符 位运算符 其他

表达式 表达式 = 操作符 + 操作数 每个表达式都有一个运算结果,该结果叫做返回值,返回值的类型叫做返回类型

所有的表达式都可以当作数据使用

常见表达式的返回值和类型:

使用的运算符表达式返回值返回值的类型
=赋值表达式赋值的结果
+字符串拼接表达式拼接成的字符串string
.访问表达式所访问属性的值
[ ]访问表达式所访问属性的值
( )函数调用表达式结果取决于函数的运行
+ - * / %算术表达式算术运算的结果number
> < >= <= == === != !==比较表达式比较结果(true/false)boolean
&& || !逻辑判断表达式判断结果(true/false)boolean

如果是一个声明+赋值的表达式,返回结果为undefined。

console.log函数调用的返回结果为undefined。

chrome浏览器控制台的环境是REPL环境 REPL:Read Eval Print Loop,读-执行-打印-循环 当直接在控制台书写代码时,除了运行代码之外,还会输出该表达式的返回值

算术运算符

算术运算符作用
+求和
-求差
*求积
/求商
%取余

算术运算中的一些细节

  1. 数字运算是不精确的

  2. 当除数为0时

    正数/0 得到结果Infinity(正无穷)

    负数/0 得到结果-Infinity(负无穷)

    0/0 得到结果NaN

  3. 求余时,余数的符号余被除数相同

非数字类型使用算术运算符时

  1. 当使用除加号外的算术运算符时

    允许时,浏览器会将原始类型转换为数字类型(隐式转换),然后进行计算

    • boolean: true→1,false→0

    • string:

      字符串内是正确的数字→数字,

      字符串内为非数字→NaN

      字符串内为Infinity→Infinity,

      空字符串→0

      字符串转换时会忽略前后空格

    • null: null→0

    • undefined: undefined -> NaN

    • object:

      将对象类型先转换为字符串类型,然后再将该字符串转换为数字类型

      object-> "[object Object]" -> NaN

  2. 加号运算符

    • 加号一边有字符串,含义变为字符串拼接

      将另一边的其他类型,转换为字符串

      数字 -> 数字字符串 boolean -> boolean字符串 null -> "null" undefined -> "undefined" 对象 -> "[object Object]"

    • 加号两边都没有字符串,但一边有对象,将对象转换为字符串,然后按照上面的规则进行

    • 其他情况和上面的数学运算一致

NaN虽然是数字类型,但它和任何数字作任何运算所得到得到的结果都是NaN

赋值运算符

赋值运算符:对变量赋值的运算符

运算符作用
=赋值
+=加法赋值
-=减法赋值
*=乘法赋值
/=除法赋值
%=取余赋值

例:

let a = 1
a += 1  //等价于a=a+1
a *= 2  //等价与a=a*2

自增/自减运算符

自增运算符:

  • 符号:++
  • 作用:让变量加1 自减运算符:
  • 符号:--
  • 作用:让变量减1
  1. 前置自增
let i = 1
++i
console.log(i)  //结果为2
  1. 后置自增
let i = 1
i++
console.log(i)  //结果为2
  1. 前置自增和后置自增的区别[仅做了解] 前置自增和后置自增单独使用时没有区别,当参与运算时会有区别
  • 前置自增(++i),先自加再参与运算
let i = 1
console.log(i)        //1
console.log(++i + 1)  //3
console.log(i)        //2
  • 后置自增(i++),先参与运算再自加
let i = 1
console.log(i)        //1
console.log(i++ + 1)  //2
console.log(i)        //2
let i = 1
console.log(i)              //1
console.log(i++ + ++i + i)  //7
console.log(i)              //3

比较运算符

比较两个数据大小、是否相等,根据比较结果返回一个布尔值(true / false)

比较运算符作用
左边是否大于右边
<左边是否小于右边
>=左边是否大于或等于右边
<=左边是否小于或等于右边
===左右两边是否类型都相等(重点)
==左右两边是否相等
!=左右值是否不相等
!==左右两边是否不全等
console.log(2 > 3)     //false
console.log(2 >= 2)    //true
console.log(2 == 2)    //true
console.log(2 == '2')  // true
// 比较运算符有隐式转换,把'2'转换为2再行判断
console.log(2 === '2')  //flase ===全等号既判断值也判断类型
console.log(NaN === NaN) //flase NaN 不等于任何人,包括他自己
console.log(undefined === null)  //false
console.log(2 !== '2')     // true  
console.log(2 != '2')      // false 
//字符串的比较是比较字符对应的ASCII码
console.log('a' < 'b')     // true 
console.log('aa' < 'ab')   // true
console.log('aa' < 'aac')  // true

逻辑运算符

符号名称特点
&&逻辑与一假则假
||逻辑或一真则真
!逻辑非(取反)真变假,假变真

运算符优先级

优先级运算符顺序
1小括号( )
2一元运算符++ -- !
3算术运算符先 * / % 后+ -
4比较运算符> >= < <=
5相等运算符== != === !==
6逻辑运算符先&& 后 ||
7赋值运算符=
8逗号,

逻辑运算符优先级:

非>与>或

语句

表达式和语句

表达式:表达式是可以被求值的代码,JavaScript引擎会将其计算出一个结果

语句:语句是一段可执行的代码

二者的区别:

  • 表达式可以被求值,所以可以卸载赋值语句的右侧;

  • 语句不一定有值,所以像是alert()、for、break等语句就不能被用于赋值

分支语句

程序三大流程控制语句:

顺序结构:从上至下依次执行代码

分支结构:根据条件执行代码

循环结构:重复执行某段代码

分支语句

if、三元运算符、switch

if语句

if语句有三种使用:单分支、双分支、多分支

单分支if语句:

if(条件表达式) {
  // 满足条件执行此处代码块
}

双分支if语句:

if (条件表达式){
  // 满足条件执行此处代码块
} else {
  // 不满足条件执行此处代码块
}

多分支if语句:

if(条件1){
    // 满足条件1,执行此处代码块
}
else if(条件2){
    // 不满足条件1,但满足条件2,执行此处代码块代码块
}
else if(条件3){
    // 不满足条件1,不满足条件2,但满足条件3,执行此处代码块
}
//....
else{
    // 以上条件都不满足执行此处代码块
}
  1. 如果某个条件满足,则直接忽略后面的所有条件
  2. else if 可以有多个(包含0个)
  3. else可以有1个或0个
  4. else可以换行,可以不换行
  5. 如果代码块只有一条语句,可以省略花括号(不推荐)
  6. if只能出现一次

三元运算符

使用场景: 一些简单的双分支,可以使用 三元运算符(三元表达式),写起来比 if else双分支 更简单,一般用来取值

语法:

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

例:

let num = prompt('请您输入一个数字:')
// 判断:若num小于10则在其前面补0
num = num < 10 ? 0 + num : num
alert(num)

switch语句

使用场景: 适合于有多个条件的时候,也属于分支语句,大部分情况下和 if多分支语句 功能相同

语法:

switch(表达式){
    case 数据1:
        代码块
    case 数据2:
        代码块
    //...
    default:
        代码块
}

例:

  switch (2) {
    case 1:
    console.log('您选择的是1')
    break  // 退出switch
    case 2:
    console.log('您选择的是2')
    break  // 退出switch
    case 3:
    console.log('您选择的是3')
    break  // 退出switch
    default:
    console.log('没有符合条件的')
  }

注意:

  1. 计算表达式的返回值,依次和case后面的数据进行严格相等的比较,如果某个相等,停止比较,然后运行其内部的代码块,再然后,依次运行之后的所有代码块。
  2. 在case分支内部,使用break语句,可以立即停止switch结构,没有break会造成case穿透
  3. default在前面的所有case都不匹配时运行。可以省略
  4. switch case语句一般用于等值判断, if适合于区间判断
  5. if 多分支语句开发要比switch更重要,使用也更多

断点调试:

断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来

作用:帮助理解代码的运行,找到bug

用法:浏览器打开调试界面 在sources一栏 ,选择代码文件