JavaScript基础:运算符和流程控制

目录

运算符

算术运算符

赋值运算符的简写

自增自减的坑

比较运算符

逻辑运算符

流程控制

[if 语句](#if 语句)

三元运算符

[switch 语句](#switch 语句)

[while 循环](#while 循环)

[break 和 continue](#break 和 continue)

无限循环

运算符

算术运算符

加减乘除大家都懂,说几个容易踩坑的地方:

复制代码
console.log(1 + 2 * 3 / 2)  // 4,先乘除后加减
console.log(5 % 3)  // 2,取余数

取余这个操作挺有用的,比如判断一个数是不是偶数:

复制代码
if (num % 2 === 0) {
  console.log('这是个偶数')
}

还有个坑,计算失败会得到 NaN:

复制代码
console.log('abc' - 2)  // NaN,字符串减数字算不出来
console.log('abc' + 2)  // 'abc2',加号变成字符串拼接了

赋值运算符的简写

复制代码
let num = 10
num = num + 5  // 普通写法
num += 5       // 简写,效果一样

常用的就这几个: += 、 -= 、 *= 、 /= ,写多了就习惯了。

自增自减的坑

++ 和 -- 看着简单,但前置后置有区别:

复制代码
let i = 1
console.log(i++)  // 输出1,先用再加
console.log(i)    // 输出2

let j = 1
console.log(++j)  // 输出2,先加再用

单独用的时候没区别,但放在表达式里就容易晕。建议少写这种复杂的:

复制代码
let i = 1
console.log(i++ + ++i + i)  // 别这么写,过两天自己都看不懂

比较运算符

重点说下 == 和 === 的区别:

复制代码
console.log(2 == '2')   // true,会自动类型转换
console.log(2 === '2')  // false,类型不同就是不同

强烈建议用 === ,少踩坑。还有个冷知识:

复制代码
console.log(NaN === NaN)  // false,NaN跟谁都不相等,包括自己

逻辑运算符

三个符号: && (与)、 || (或)、 ! (非)

口诀好记:

  • && :一假则假

  • || :一真则真

  • ! :取反

    let age = 25
    console.log(age > 18 && age < 30) // true,在18到30之间
    console.log(age < 18 || age > 60) // false,不在两个范围
    console.log(!true) // false

流程控制

if 语句

单分支:

复制代码
let score = 85
if (score >= 60) {
  console.log('及格了')
}

双分支:

复制代码
let score = 55
if (score >= 60) {
  console.log('及格')
} else {
  console.log('不及格,补考吧')
}

多分支:

复制代码
let score = 75
if (score >= 90) {
  console.log('优秀')
} else if (score >= 70) {
  console.log('良好')
} else if (score >= 60) {
  console.log('及格')
} else {
  console.log('不及格')
}

有个小技巧,非布尔值也能放 if 里:

复制代码
if (1) console.log('执行')    // 数字非0就是true
if (0) console.log('不执行')  // 0是false
if ('abc') console.log('执行')  // 非空字符串是true
if ('') console.log('不执行')   // 空字符串是false

三元运算符

简单的双分支可以用三元运算符简化:

复制代码
let age = 20
let status = age >= 18 ? '成年' : '未成年'

等价于:

复制代码
let status
if (age >= 18) {
  status = '成年'
} else {
  status = '未成年'
}

常用场景:补零

复制代码
let num = 5
num = num < 10 ? '0' + num : num  // '05'

switch 语句

适合多个固定值判断的情况:

复制代码
let day = 3
switch (day) {
  case 1:
    console.log('周一')
    break
  case 2:
    console.log('周二')
    break
  case 3:
    console.log('周三')
    break
  default:
    console.log('其他')
}

注意 break 不能少,不然会一直往下执行(叫 case 穿透)。

switch 和 if 的区别:

  • switch 适合判断固定值
  • if 适合判断范围

while 循环

重复执行某段代码:

复制代码
let i = 1
while (i <= 5) {
  console.log('第' + i + '次')
  i++  // 别忘了自增,不然死循环
}

循环三要素:

  1. 初始值
  2. 终止条件
  3. 变量变化

break 和 continue

  • break :直接退出整个循环

  • continue :跳过本次,继续下一次

    // 找到3就停
    let i = 1
    while (i <= 5) {
    if (i === 3) {
    break
    }
    console.log(i)
    i++
    }
    // 输出:1 2

    // 跳过3
    let j = 0
    while (j < 5) {
    j++
    if (j === 3) {
    continue
    }
    console.log(j)
    }
    // 输出:1 2 4 5

无限循环

有时候需要一直运行,直到满足某个条件才退出:

复制代码
while (true) {
  let answer = prompt('你爱我吗?')
  if (answer === '爱') {
    break
  }
}
相关推荐
格林威11 分钟前
工业视觉检测:两大主流异常检测开源框架深度对比(PatchCore vs SPADE)
开发语言·人工智能·深度学习·数码相机·计算机视觉·视觉检测·工业相机
threelab14 分钟前
Three.js 3D 饼图效果 | 三维可视化 / AI 提示词
javascript·人工智能·3d
2zcode16 分钟前
基于Matlab元胞自动机模拟(CA)静态再结晶过程
开发语言·matlab·静态再结晶
研究点啥好呢20 分钟前
滴滴Go后端开发工程师面试题精选:10道高频考题+答案解析
java·开发语言·golang
Levin__NLP_CV_AIGC21 分钟前
py文件中文件复制方法
开发语言·python
yong999026 分钟前
EKF-SLAM在MATLAB上的仿真实现
开发语言·matlab
广州山泉婚姻29 分钟前
C语言三种基本程序结构详解
c语言·开发语言
上弦月-编程33 分钟前
【C语言】函数栈帧的创建与销毁(底层原理)
c语言·开发语言
eqwaak036 分钟前
PyTorch张量操作全攻略:从入门到精通
开发语言·人工智能·pytorch·python
傻瓜搬砖人36 分钟前
SpringMVC的请求
java·前端·javascript·spring