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
  }
}
相关推荐
嘻哈baby5 小时前
大量消息在 MQ 里长时间积压,该如何解决?
开发语言
lytao1235 小时前
90% 覆盖率不等于没 Bug:用风险配置测试组合
前端·javascript·bug·软件工程
mayaairi5 小时前
Vue2 组件通讯(一):Props传值完全指南
前端·javascript·vue.js
码艺-Alimjan6 小时前
Tauri 2.x + Vue 3 桌面应用开发实战:从踩坑到完美落地
前端·javascript·vue.js·rust·typescript·go
qq_570398576 小时前
Three.js基础使用-案例
开发语言·javascript·ecmascript
Suxing96 小时前
C语言基础分享:C语言文件操作:从“写日记”到“拍电影”的存盘指南
c语言·开发语言
右耳朵猫AI6 小时前
Node.js周刊2026W36 | NestJS 12发布、Remix 3 RC、pnpm 12 Rust重写、Node.js 26.8.0
开发语言·rust·node.js
程序员蜡笔熊6 小时前
Vite 8 换芯实测:Rolldown 替掉双引擎,构建快 3.19 倍
前端·javascript·vue
统计学小王子6 小时前
数学建模国赛倒计时 2 天 ——《异常值的处理(R语言)》
开发语言·数学建模·r语言
z落落9 小时前
C# WinForm Socket 转串口设备服务器+Modbus CRC16校验+Socket 客户端
服务器·开发语言·c#