常见用法
对于或运算符和与运算符,通常用法是在判断条件中返回一个布尔值
// 或运算符
if(a==0 || a==1){
// ...逻辑
}
// 与运算符
if(a>10 && a<10){
// ...逻辑
}
其他用法
下面来了解一下他们不一样的用法
let num = 10 || 0
let str = "" && "hello"
在 JavaScript 中,|| 运算符的行为有一些特殊之处。它不仅仅返回布尔值,而是根据操作数的值返回一个具体的值(可能是布尔值,也可能是其他类型的值)。&&运算符同理。
1. 逻辑或运算符 ||
它返回的是第一个 真值 或最后一个 假值。
规则:
- 如果左边的操作数是 真值(truthy) ,则返回左边的操作数。
- 如果左边的操作数是 假值(falsy) ,则返回右边的操作数。
示例:
console.log(0 || 10); // 输出 10,因为 0 是假值
console.log(5 || 10); // 输出 5,因为 5 是真值
console.log(null || 20); // 输出 20,因为 null 是假值
console.log("" || "Hello"); // 输出 "Hello",因为 "" 是假值
console.log(undefined || 30); // 输出 30,因为 undefined 是假值
常见用途:
-
默认值赋值:
let name = userInput || "Guest"; // 如果 userInput 为空或未定义,name 将被赋值为 "Guest"
2. 逻辑与运算符 &&
&& 运算符的行为与 || 类似,但它返回的是第一个 假值 或最后一个 真值。
规则:
- 如果左边的操作数是 假值(falsy) ,则返回左边的操作数。
- 如果左边的操作数是 真值(truthy) ,则返回右边的操作数。
示例:
console.log(0 && 10); // 输出 0,因为 0 是假值
console.log(5 && 10); // 输出 10,因为 5 是真值
console.log(null && 20); // 输出 null,因为 null 是假值
console.log("" && "Hello"); // 输出 "",因为 "" 是假值
console.log(undefined && 30); // 输出 undefined,因为 undefined 是假值
常见用途:
-
用于条件执行(短路求值):
user && user.name; // 如果 user 存在,返回 user.name;否则返回 user(可能是 null 或 undefined)
3. 三元运算符 ? :
三元运算符是 if-else 的简写形式,但它返回的是具体的值,而不是布尔值。
规则:
- 如果条件为真,返回
?后面的值。 - 如果条件为假,返回
:后面的值。
示例:
const age = 18;
const status = age >= 18 ? "成年人" : "未成年人";
console.log(status); // 输出 "成年人"
常见用途:
-
用于简单的条件赋值:
const value = someCondition ? "真值" : "假值";
4. 空值合并运算符 ??
?? 是 ES2020 引入的运算符,专门用于处理 null 或 undefined 的情况。
规则:
- 如果左边的操作数是
null或undefined,则返回右边的操作数。 - 否则,返回左边的操作数。
示例:
console.log(null ?? 10); // 输出 10,因为 null 是 null
console.log(undefined ?? 20); // 输出 20,因为 undefined 是 undefined
console.log(0 ?? 30); // 输出 0,因为 0 不是 null 或 undefined
console.log("" ?? "Hello"); // 输出 "",因为 "" 不是 null 或 undefined
常见用途:
-
用于处理默认值,避免
0或""被误判为无效值:const value = someValue ?? "默认值";
5. 可选链运算符 ?.
?. 是 ES2020 引入的运算符,用于安全地访问嵌套对象的属性。
规则:
- 如果左边的操作数是
null或undefined,则返回undefined。 - 否则,继续访问右边的属性。
示例:
const user = { name: "Alice", address: { city: "Beijing" } };
console.log(user.address?.city); // 输出 "Beijing"
console.log(user.contact?.phone); // 输出 undefined,因为 contact 不存在
常见用途:
-
避免访问不存在的属性时抛出错误:
const phone = user.contact?.phone ?? "未知";
6. 赋值运算符 = 和复合赋值运算符
赋值运算符 = 和复合赋值运算符(如 +=、-=、*= 等)不仅会赋值,还会返回赋的值。
示例:
let a = 10;
let b = (a += 5); // a 变为 15,b 也变为 15
console.log(a, b); // 输出 15 15
常见用途:
-
用于链式赋值:
let x, y, z; x = y = z = 10; // x、y、z 都变为 10
7. 逗号运算符 ,
逗号运算符用于分隔多个表达式,并返回最后一个表达式的值。
示例:
let a = (1, 2, 3); // a 变为 3
console.log(a); // 输出 3
常见用途:
-
用于简化代码:
for (let i = 0, j = 10; i < j; i++, j--) { console.log(i, j); }
总结
JavaScript 中的运算符不仅仅是简单的布尔运算或数学运算,它们的行为非常灵活,可以根据操作数的值返回具体的结果。以下是一些常见运算符的总结:
| 运算符 | 行为 |
|---|---|
| 或运算符 | 返回第一个真值或最后一个假值 |
&& | 返回第一个假值或最后一个真值 |
?? | 返回第一个非 null 或非 undefined 的值 |
?. | 安全访问嵌套属性,避免抛出错误 |
? : | 根据条件返回两个值中的一个 |
= 和复合赋值 | 赋值并返回赋的值 |
, | 分隔多个表达式,返回最后一个表达式的值 |
这些运算符的灵活特性使得 JavaScript 在处理条件判断、默认值和链式操作时非常方便。