js ??运算符

js ??运算符

js ??运算符

1. 简介

??运算符是一种新的逻辑运算符,在JavaScript中引入自ECMAScript 2020标准。它被称为nullish合并运算符,用于简洁地判断一个值是否为null或undefined,并返回一个非空的默认值。

在许多编程语言中,我们经常需要对一个变量进行判断,如果它为null或undefined,就赋予一个默认值。传统的写法通常使用逻辑或运算符(||),但缺点是在某些情况下会导致错误的结果。??运算符的出现主要是为了解决这个问题。

2. 使用方式

??运算符的使用方式很简单,它的语法形式为:a ?? b,其中a和b都是表达式,a是一个待判断的值,b是默认值。

当a的值为null或undefined时,??运算符返回b;否则,返回a的值。

3. 示例代码

为了更好地理解??运算符的使用场景,我们来看几个示例代码。

3.1 使用??运算符给变量赋默认值

let validValue;

// 使用逻辑或运算符的写法
let defaultValue = validValue || 'Default Value';
console.log(defaultValue);  // 输出:Default Value

// 使用??运算符的写法
defaultValue = validValue ?? 'Default Value';
console.log(defaultValue);  // 输出:Default Value

在上面的代码中,我们定义了一个变量validValue,它没有被赋值,默认值为undefined。我们需要判断validValue是否为空,如果为空,就赋予默认值。使用逻辑或运算符时,为空的判断条件是validValue || 'Default Value',这会导致一个错误的结果,因为空字符串、0和false等值也会被判断为false。而使用??运算符时,判断条件是validValue ?? 'Default Value',只有当validValue为null或undefined时,才会赋予默认值。

3.2 使用??运算符解决函数参数默认值问题

function showMessage(name, message) {
  name = name ?? 'Guest';
  message = message ?? 'Welcome!';

  console.log(`Hello, {name}!{message}`);
}

// 不传参数的情况
showMessage();  // 输出:Hello, Guest! Welcome!

// 传入部分参数的情况
showMessage('Alice');  // 输出:Hello, Alice! Welcome!

showMessage('Bob', 'Good morning!');  // 输出:Hello, Bob! Good morning!

在上述代码中,我们定义了一个名为showMessage的函数,它接受两个参数namemessage,并打印出欢迎消息。使用??运算符给参数赋默认值,可以在不传入参数或者只传入部分参数时,保证程序的正常运行。

除了函数参数,??运算符还可以用于给变量赋默认值、对象属性赋默认值等场景,都可以通过短路判断来简化代码的编写。

4. 空值合并运算符 vs 逻辑或运算符

为了更好地理解与传统逻辑或运算符之间的区别,我们来看一个示例。

let a = 0;
let b = '';

console.log(a || 5);  // 输出:5
console.log(b || 'Hello');  // 输出:Hello

console.log(a ?? 5);  // 输出:0
console.log(b ?? 'Hello');  // 输出:

我们定义了两个变量ab,分别赋值为0和空字符串。使用逻辑或运算符判断时,0和空字符串都会被判断为false,因此会返回默认值。而使用??运算符判断时,只有null和undefined才会返回默认值。

5. 总结

通过本文的介绍,我们了解了??运算符的用法及其与逻辑或运算符之间的区别。在判断一个变量是否为null或undefined,并给它赋一个默认值时,我们可以优先选择使用??运算符,以减少错误发生的概率。通过简化代码,提高代码的可读性和可维护性。在实际开发中,我们可以根据具体需求,灵活运用??运算符,提升代码的效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程