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
  }
}
相关推荐
Halo_tjn2 小时前
Java 接口的定义重构学生管理系统
java·开发语言·算法
阿Y加油吧2 小时前
栈的经典应用:从「有效括号」到「寻找两个正序数组的中位数」深度解析
开发语言·python·算法
xiaotao1312 小时前
阶段零:Python 安装与虚拟环境(venv / Conda)
开发语言·人工智能·python·conda
dr_yingli2 小时前
fMRI(4-1)统计分析报告生成器说明
开发语言·matlab
窝子面2 小时前
NestJs+MongoDB+Deepseek+Langchain实现ai聊天助手
javascript·数据库·人工智能·mongodb
m0_716765232 小时前
数据结构--顺序表的插入、删除、查找详解
c语言·开发语言·数据结构·c++·学习·算法·visual studio
Halo_tjn2 小时前
Java 抽象类 知识点
java·开发语言·算法
踏着七彩祥云的小丑3 小时前
Python——排序
开发语言·python
c++圈来了个新人3 小时前
C++类和对象(上)
c语言·开发语言·数据结构·c++·考研