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
  }
}
相关推荐
励志不掉头发的内向程序员1 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
PHP实战开发录1 小时前
PHP接口大整数为什么变了
开发语言·php
临床数据科学和人工智能兴趣组4 小时前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
andyweike7 小时前
php笔记
开发语言·笔记·php
Circ.8 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python
现任明教教主~10 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
Zhou14113610 小时前
SpringSecurity_02_授权与高级功能
开发语言·python
码匠许师傅11 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http