程序控制
1. 条件语句
1.1 if
A. 基础结构
const score = 85;
if (score >= 90) {
console.log("优秀 (A)");
} else if (score >= 60) {
console.log("及格 (B)"); // 这一行会被执行
} else {
console.log("不及格 (C)");
}
B. 真假
在 if (condition) 的括号里,JavaScript 不仅仅接受 true 或 false。它会把任何值都强制转换为布尔值。
-
假值 (Falsy):
false,0,""(空字符串),null,undefined,NaN。 -
真值 (Truthy): 除了上面 6 个,其他所有值都是真(包括空数组
[]和空对象{})。
const username = ""; // 空字符串是假值
if (username) {
console.log("欢迎, " + username);
} else {
console.log("请先登录"); // 执行这里
}
1.2 switch 语句
const day = 2;
switch (day) {
case 1:
console.log("今天是周一");
break; // 必须加!否则会继续执行 case 2
case 2:
console.log("今天是周二");
break; // 执行这里,然后跳出
case 3:
console.log("今天是周三");
break;
default:
console.log("未知的一天");
}
注意:
switch进行比较时使用的是严格相等 (===),这意味着类型必须一致(字符串 "1" 不等于数字 1)。
1.3 三元运算符
1.4 短路逻辑
利用逻辑运算符(&&, ||)来代替简短的 if 语句。
A. 逻辑与 (&&)
常用于 React 或 Vue 中,或者执行某个函数前先判断对象是否存在。
const isLogined = true;
// 只有当 isLogined 为 true 时,才会执行后面的 alert
isLogined && alert("欢迎回来!");
// 等同于: if (isLogined) { alert("欢迎回来!"); }
B. 逻辑或 (||) —— "默认值保底"
如果前面的值是“假值”(比如 null 或 undefined),就使用后面的默认值。
2. 循环和控制结构
2.1 for 循环
2.2 while 循环
2.3 do...while 循环
2.4 循环控制:Break 和 Continue
以上全部同 C。
2.5 现代循环语法 (ES6+)
除了上面传统的 for 循环,现代 JavaScript (ES6) 提供了更简洁的语法来遍历数据(特别是数组和对象)。
A. for...of (主要用于数组)
它直接取出数组中的值,而不是索引。
const fruits = ["Apple", "Banana", "Orange"];
// 传统写法:需要 fruits[i]
// for (let i = 0; i < fruits.length; i++) { ... }
// 现代写法:读起来像英语一样顺畅
for (const fruit of fruits) {
console.log(fruit);
}
// 输出: Apple, Banana, Orange
B. for...in (主要用于对象)
它遍历的是键名 (Key) 或索引。一般用来遍历对象的属性。
const user = { name: "Gemini", age: 1, role: "AI" };
for (const key in user) {
console.log(key + ": " + user[key]);
}
// 输出:
// name: Gemini
// age: 1
// role: AI
3. 设置和使用定时器
JavaScript 提供两个方法
setTimeout()和setInterval(),都是 HTML DOM window 对象的方法。
3.1 setTimeout(action, delay) —— 延时执行
该方法在第 2 个参数指定的毫秒数后,调用作为第一个参数传入的函数(或计算该表达式)。
假设页面包含一个 <div> 元素: <div id="id1">I'm about to disappear</div>
function hide(elementId){
document.getElementById(elementId).style.display = 'none';
}
// 在页面加载完毕后执行
window.onload = function(){
setTimeout("hide('id1')",3000); // 字符串内写函数调用是古老写法,易被注入且性能较差,有以下更好的写法:
// 写法 A:传入匿名函数(最常用)
setTimeout(function() {
hide('id1');
}, 3000);
// 写法 B:箭头函数(ES6)
setTimeout(() => hide('id1'), 3000);
}
取消定时器: setTimeout() 返回一个值(定时器 ID),在中途取消定时,可以将这个返回值传给 clearTimeout() 方法。
3.2 setInterval(action, delay) —— 循环执行
-
功能:工作方式与
setTimeout类似,但它不是执行一次,而是重复地执行。 -
特性:每隔指定的时间段(第2个参数),就会再次触发代码执行。
-
如何取消: 同样会返回一个值,可以通过将该值传递给
clearInterval()方法来停止定时器。