灵活使用Javascript运算符

95 阅读4分钟

常见用法

对于或运算符与运算符,通常用法是在判断条件中返回一个布尔值

// 或运算符
if(a==0 || a==1){
// ...逻辑
}
// 与运算符
if(a>10 && a<10){
// ...逻辑
}

其他用法

下面来了解一下他们不一样的用法

let num = 10 || 0

let str = "" && "hello"

在 JavaScript 中,|| 运算符的行为有一些特殊之处。它不仅仅返回布尔值,而是根据操作数的值返回一个具体的值(可能是布尔值,也可能是其他类型的值)。&&运算符同理。

1. 逻辑或运算符 ||

它返回的是第一个 真值 或最后一个 假值

规则:

  1. 如果左边的操作数是 真值(truthy) ,则返回左边的操作数。
  2. 如果左边的操作数是 假值(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. 逻辑与运算符 &&

&& 运算符的行为与 || 类似,但它返回的是第一个 假值 或最后一个 真值

规则:

  1. 如果左边的操作数是 假值(falsy) ,则返回左边的操作数。
  2. 如果左边的操作数是 真值(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 的情况。

规则:

  1. 如果左边的操作数是 null 或 undefined,则返回右边的操作数。
  2. 否则,返回左边的操作数。

示例:

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 引入的运算符,用于安全地访问嵌套对象的属性。

规则:

  1. 如果左边的操作数是 null 或 undefined,则返回 undefined
  2. 否则,继续访问右边的属性。

示例:

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 在处理条件判断、默认值和链式操作时非常方便。