当前位置: 首页 > news >正文

JS分支和循环

程序的执行顺序

在程序开发中,程序有三种不同的执行顺序

1.顺序执行

2.分支执行

3.循环执行

程序的代码块

  <script>//一个代码块{var num1=1var num2=2var num3=num1+num2}//一个休想var info={name:"chen",age:18}

1.if分支语句(单分支语句)

if(条件){

}

如果条件成立执行代码块

补充一:如果代码块中只有一句语句,可以省略大括号

补充二:if(...)语句会计算圆括号的表达式,并将结果转换为布尔型(Boolean)

转换规则和Boolean函数的规则一样

数字0、空字符串“”、null、undefined和NaN都会被转换成fasle

  因为它们被称为“假值”

其他值被转换成true,所以它们被称为“真值(truthy)”

2.if...else语句 

if(条件){}

else{}

3.if-else if-else语句

此结构能对多个条件进行判断,一旦某个条件为真,就会执行对应的代码块。

 

javascript

let score = 85;if (score >= 90) {console.log("成绩为 A");
} else if (score >= 80) {console.log("成绩为 B");
} else if (score >= 70) {console.log("成绩为 C");
} else if (score >= 60) {console.log("成绩为 D");
} else {console.log("成绩为 F");
}
// 输出:成绩为 B
 

执行流程

 
  • 先判断 if 条件,若为 true,则执行对应的代码块,之后跳出整个 if 结构。
  • 若 if 条件为 false,就接着判断第一个 else if 条件,若为 true 则执行其代码块并跳出。
  • 若所有 else if 条件都为 false,且存在 else 块,就会执行 else 块中的代码。

 4.三元运算符 

基本语法

javascript

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

执行逻辑

 
  • 先对 条件表达式 进行求值。
  • 若结果为 true,则整个三元运算符返回 表达式1 的值。
  • 若结果为 false,则返回 表达式2 的值。

基础示例

javascript

// 判断一个数是奇数还是偶数
let num = 6;
let result = num % 2 === 0 ? "偶数" : "奇数";
console.log(result); // 输出:偶数// 根据年龄判断是否成年
let age = 17;
let isAdult = age >= 18 ? "已成年" : "未成年";
console.log(isAdult); // 输出:未成年

嵌套使用

三元运算符可以嵌套使用,从而实现更复杂的条件判断。

 

javascript

// 根据分数给出对应的等级
let score = 85;
let grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F";console.log(grade); // 输出:B

 

注意:虽然三元运算符嵌套能让代码更简洁,但要是嵌套层次过多,代码的可读性就会变差。一般嵌套不要超过两层。

 

    <script>//案例一:var num1=1var num2=2var result=num1>num2?num1:num2console.log(result)//案例二:给变量赋一个默认值var info={name:"chen"}var obj=info?info:{}console.log(obj)//案例三:让用户输入一个年龄,判断是否是成年人var age=prompt("请输入你的年龄")age=Number(age)// if(age>=18){//   alert("成年人")// }else{//   alert("未成年人")// }var message=alert(age>=18?"成年人":"未成年人")</script>

 

5.逻辑运算符 

1. 逻辑与(&&

语法表达式1 && 表达式2
执行规则

  • 若 表达式1 的值为 false,则直接返回 表达式1 的值,不会对 表达式2 进行计算。
  • 若 表达式1 的值为 true,则返回 表达式2 的值。

示例

javascript

console.log(true && true);   // 输出:true
console.log(true && false);  // 输出:false
console.log(false && true);  // 输出:false(短路求值)
console.log(false && 0);     // 输出:false(不会计算0)// 非布尔值的情况
console.log(5 && "hello");   // 输出:"hello"
console.log(null && "test"); // 输出:null(短路求值)

常见用途

  • 条件判断:检查多个条件是否同时成立。

    javascript

    const age = 25;
    const hasLicense = true;
    if (age >= 18 && hasLicense) {console.log("可以开车"); // 会执行
    }
    
  • 短路求值:避免在条件不满足时执行某些操作。

    javascript

    const user = { name: "张三" };
    // 若user存在才访问name属性
    console.log(user && user.name); // 输出:"张三"
    

2. 逻辑或(||

语法表达式1 || 表达式2
执行规则

  • 若 表达式1 的值为 true,则直接返回 表达式1 的值,不计算 表达式2
  • 若 表达式1 的值为 false,则返回 表达式2 的值。

示例

javascript

console.log(true || true);   // 输出:true(短路求值)
console.log(true || false);  // 输出:true(短路求值)
console.log(false || true);  // 输出:true
console.log(false || 0);     // 输出:0// 非布尔值的情况
console.log("" || "默认值");  // 输出:"默认值"
console.log(0 || null);      // 输出:null

常见用途

  • 设置默认值:当变量的值为假值(如 nullundefined)时,使用默认值。

    javascript

    const username = null;
    const displayName = username || "访客";
    console.log(displayName); // 输出:"访客"
    
  • 多重条件检查:只要有一个条件满足即可。

    javascript

    const day = "周六";
    if (day === "周六" || day === "周日") {console.log("周末愉快"); // 会执行
    }
    

3. 逻辑非(!

语法!表达式
执行规则

  • 对 表达式 的值进行取反操作,将其转换为布尔值后再取反。

示例

javascript

console.log(!true);    // 输出:false
console.log(!false);   // 输出:true
console.log(!0);       // 输出:true(0被视为false)
console.log(!"");      // 输出:true(空字符串被视为false)
console.log(!null);    // 输出:true
console.log(!undefined); // 输出:true
console.log(!5);       // 输出:false(非零数字被视为true)
console.log(!"hello"); // 输出:false

常见用途

  • 条件取反:反转某个条件的判断结果。

    javascript

    const isLoggedIn = false;
    if (!isLoggedIn) {console.log("请先登录"); // 会执行
    }
    
  • 强制转换为布尔值:使用两个 !! 可以将值强制转换为布尔类型。

    javascript

    console.log(!!"hello"); // 输出:true
    console.log(!!0);      // 输出:false
    

4. 优先级与结合性

  • 优先级! 的优先级高于 &&&& 的优先级高于 ||

    javascript

    // 等价于 (true && false) || true
    console.log(true && false || true); // 输出:true
    
  • 结合性&& 和 || 都是左结合的,即从左到右进行计算。

    javascript

    // 等价于 ((a && b) && c)
    a && b && c;
    

5. 短路求值(Short-circuit Evaluation)

逻辑与(&&)和逻辑或(||)都具有短路特性,即一旦结果确定,就不再计算后续表达式。

  • && 的短路:若左侧为 false,右侧表达式不会执行。

    javascript

    let x = 5;
    false && (x = 10);
    console.log(x); // 输出:5(右侧赋值未执行)
    
  • || 的短路:若左侧为 true,右侧表达式不会执行。

    javascript

    let y = 3;
    true || (y = 7);
    console.log(y); // 输出:3(右侧赋值未执行)
    

6. 实际应用示例

javascript

// 示例1:检查对象属性是否存在并使用
const user = { profile: { email: "test@example.com" } 
};// 安全访问嵌套属性
const email = user && user.profile && user.profile.email;
console.log(email); // 输出:"test@example.com"// 示例2:函数参数的默认值(ES5方式)
function greet(name) {name = name || "朋友"; // 若name为假值,则使用默认值console.log(`你好,${name}!`);
}greet();        // 输出:"你好,朋友!"
greet("张三");  // 输出:"你好,张三!"

7. 注意事项

  • 非布尔值的处理:逻辑运算符会将操作数转换为布尔值进行计算,但返回的是原始值,而非布尔值。

    javascript

    console.log(5 || 10); // 输出:5(而非true)
    
  • 与位运算符的区别:逻辑运算符(&&||)处理的是布尔值,而位运算符(&|)处理的是二进制位。

    javascript

    // 逻辑与
    console.log(true && false); // 输出:false// 位与(将值转换为32位整数后按位与)
    console.log(5 & 3); // 输出:1(二进制:0101 & 0011 = 0001)
    

掌握这些逻辑运算符的使用方法后,你就能在 JavaScript 中构建更复杂、更灵活的条件表达式了。

 阅读文章(逻辑或本质/逻辑与本质)的前提说明:注意在文章下面提到的运算元不是一个单个的运算元,是一整个表达式(||的左面或者右面的表达式)

5.1逻辑或的本质 

||(或)两个竖线符号表示“或”运算符(也成为短路或)

result=a||b

从左到右依次计算操作符

处理每一个操作数的时候,都将其转化成布尔值(Boolean)

如果结果是true,就停止计算,返回这个操作数的初始值

如果所有的操作数都被计算过(也就是,转换结果都是false),则返回最后一个操作数

    <script>//脱离分支语句,单独使用逻辑或/*1.先将运算元转换成Booleanleix2.对转成的boolean类型进行判断如果为true,直接将结果(元类型)返回如果为false,进行第二个运算元的判断以此类推3.如果找到最后,也没有找到,那么返回最后一个运算元*///本质推导一:之前的多条件是如何进行判断的var chineseScore=95var mathScore=90//chineseScore>90 为true ,那么后续的条件都不会进行判断if(chineseScore>90|| mathScore>90){}//本质推导二:获取第一个有值的结果var info="abc"var obj={name:"chen"}var message=info||obj||"我是默认值"console.log(message.length)</script>

 5.2逻辑与的本质

    <script>// 运算元1&&运算元2&&运算元3/*也可以脱离条件判断来使用逻辑与的本质1.拿到第一个运算元,将运算元转成Booleanleix2.对运算元的Boolean类型进行判断如果false,返回运算元(原始值)如果true,查找下一个继续来运算以此类推3.如果查找了所有的都为true,那么返回最后一个运算元(原始值)*///  本质推导一:逻辑与,称之为短路与var chineseScore=95var mathScore=99if(chineseScore>90&&mathScore>90){}//本质推导二:对一些属性(对象中的方法)进行有值判断var obj={name:"chen",friend:{name:"wei",eating:function(){console.log("eat something")}}}//调用eating函数//obj.friend.eating()obj&&obj.friend&&obj.friend&&obj.friend.eating&&obj.friend.eating()</script>

5.3逻辑非的补充 

逻辑非运算符接收一个参数,并且按照如下进行运算:

步骤一:将操作数转化为布尔类型:true/false

步骤二:返回相反的值

两个非运算!!有时候用来将某个值转化为布尔类型

也就是,第一个非运算将该值转化为布尔类型并且取反,第二个非运算再次取反

最后我们就得到了一个任意值到布尔值的转化

    <script>var message="Hello World"//console.log(Boolean(message))// 将一个值转化为布尔值的另一个做法console.log(!!message)</script>

6.switch语句 

 switch是分支结构的一种语句:

它是通过判断表达式的结果(或者变量)是否等于case语句的常量,来执行相应的分支体的

与if语句不同的是,switch语句只能做值的相等判断(使用全等运算符===),而if语句可以做值的范围判断;

switch的语法:

switch语句有至少一个case代码块和一个可选的default代码块

switch(变量){

  case 常量1:

  //语句一

  break

  case 常量2:

  //语句二

  break

  default:

  //语句三

}

switch语句的补充

case穿透问题:

一条case语句结束后,会自动执行下一个case的语句

这种现象被称之为case穿透

break关键字

通过在每个case的代码块后添加break关键字来解决这个问题

注意事项:这里的相等是严格相等

被比较的值必须是相同的类型才能进行匹配 

    <script>//案例//上一首的按钮:0//播放/暂停的按钮:1//下一首的按钮:2// var btnIndex=0// if(btnIndex === 0){//   console.log("点击了上一首")// }else if(btnIndex===1){//   console.log("点击了播放/暂停")// }else if(btnIndex===2){//   console.log("点击了下一首")// }else{//   console.log("当前按钮的索引有问题")// }//默认情况下是由case穿透的:使用break解决这个问题switch(btnIndex){case 0:console.log("点击了上一首")breakcase 1:console.log("点击了播放暂停")breakcase 3:console.log("点击了下一首")breakdefault:console.log("当前按钮的索引有问题")}</script>

 

相关文章:

  • 【LLM】FastAPI入门教程
  • # STM32F103 串口打印配置(HAL库)
  • 应急响应靶机-web2-知攻善防实验室
  • Lyra学习笔记 Experience流程梳理
  • DeepSeek 赋能数字孪生城市,筑牢应急管理智慧防线
  • VLAN的作用和原理
  • 【五子棋在线对战】一.前置知识的了解
  • 吴恩达MCP课程(2):research_server
  • Linux系统下安装配置 Nginx
  • Kanass入门教程- 事项管理
  • 机器视觉2D定位引导-合同要点重度讲解-技术要点及注意事项
  • Java-Character类静态方法深度剖析
  • C语言结构体的别名与创建结构体变量
  • 共享内存-systemV
  • Python 从入门到精通视频下载
  • 各种数据库,行式、列式、文档型、KV、时序、向量、图究竟怎么选?
  • 点云识别模型汇总整理
  • 【Doris基础】Doris中的Replica详解:Replica原理、架构
  • 华为OD机试真题——找出两个整数数组中同时出现的整数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 黄金价格查询接口如何用C#进行调用?
  • 郑州公司企业网站建设/营销案例分享
  • 帝国网站系统做专题/网站加速
  • 闽侯县建设局网站/网店seo是什么意思
  • 网站辅助色怎么用/nba最新新闻
  • 广州网站建设多少钱/seo搜索引擎优化技术
  • 蠡县网站建设/河南网站推广公司