JavaScript中? ?、??=、?.和 ||的区别浅析

yizhihongxing

JavaScript中 ? ?、??=、?.和 ||的区别浅析

在JavaScript中,存在 ? ?、??=、?.和 ||四种运算符,他们都有着不同的用途。本文将会对这些运算符的使用场景进行详细的说明并配有示例。

1. ? ?运算符

? ?运算符称为Nullish coalescing operator,它的作用是当左侧操作数为 undefined 或 null 时,返回右侧操作数,否则返回左侧操作数。

示例1:

const foo = null;
const bar = 'hello';
const result = foo ?? bar;
console.log(result); // 'hello'

上面的代码中,由于 foo 的值为 null,所以当执行 foo ?? bar 时,返回的值为 bar。

示例2:

const foo = false;
const bar = 'hello';
const result = foo ?? bar;
console.log(result); // false

上面的代码中,由于 foo 的值为 false,所以当执行 foo ?? bar 时,返回的值为 false。

2. ??=运算符

??=运算符称为nullish coalescing assignment operator,它的作用是只有当变量的值为undefined或null时,才会给变量赋予指定的默认值,否则不会赋值。

示例:

let foo;
foo ||= 'default';
console.log(foo); // 'default'

foo = 'value';
foo ||= 'default';
console.log(foo); // 'value'

上面的代码中,第一个 foo ||= 'default' 执行时,foo 的值为 undefined,因此将 'default' 赋值给 foo,输出结果为 'default'。第二个 foo ||= 'default' 执行时,由于 foo 的值为 'value',因此不会执行赋值操作,输出结果为 'value'。

3. ?.运算符

?.运算符称为Optional Chaining Operator,它的作用是简化多层嵌套对象的属性访问。如果使用 ?. 运算符时,前面的属性值存在,那么就返回该属性值,否则返回 undefined。

示例:

const obj = {
  prop1: {
    prop2: {
      prop3: 'hello'
    }
  }
};

console.log(obj?.prop1?.prop2?.prop3); // 'hello'
console.log(obj?.prop1?.prop2?.prop4); // undefined

上面的代码中,第一个 console.log 输出 obj.prop1.prop2.prop3 的值,结果为 'hello';第二个 console.log 输出 obj.prop1.prop2.prop4 的值,由于该属性不存在,不会报错并返回 undefined。

4. ||运算符

||运算符称为Logical OR Operator,它的作用是返回第一个真值或最后一个假值。

示例1:

const foo = '';
const bar = 'hello';
const baz = null;
const result = foo || bar || baz;
console.log(result); // 'hello'

上面的代码中,由于 foo 的值为 '',不是真值,因此继续判断 bar,由于 bar 的值为 'hello',是真值,因此返回 'hello'。

示例2:

const foo = false;
const bar = '';
const result = foo || bar;
console.log(result); // ''

上面的代码中,由于 foo 的值为 false,是假值,因此继续判断 bar,由于 bar 的值为 '',也是假值,因此返回 ''。

总结

以上就是JavaScript中 ? ?、??=、?.和 ||的区别浅析的详细讲解。需要注意的是,这些运算符在不同的场景下具有不同的作用,合理运用才能发挥其最大的功效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中? ?、??=、?.和 ||的区别浅析 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • ES6新特征数字、数组、字符串

    ES6(ECMAScript 2015)是JavaScript的一项更新,在数字、数组、字符串等方面引入了许多新特性。本文将详细讲解ES6的数字、数组、字符串新特性。 ES6新特性:数字 二进制和八进制字面量 ES6引入了二进制和八进制字面量,分别使用0b或0B以及0o或0O前缀表示。例如: let binary = 0B1101; // 13 let oc…

    JavaScript 2023年5月27日
    00
  • JS类的定义与使用方法深入探索

    JS类的定义与使用方法深入探索 什么是类 在Javascript中,类(class)是一种常见的面向对象编程(OOP)范式。它允许开发者根据构造函数,定义出对象的共通特性和方法。 类的定义基于ES6中的类声明语法,ES6中引入了类和创建类的方法。 类的定义 ES6中的类声明语法是这样的: class ClassName{ constructor(option…

    JavaScript 2023年5月27日
    00
  • 使用JavaScript开发IE浏览器本地插件实例

    使用JavaScript开发IE浏览器本地插件涉及以下步骤: 1. 编写插件代码: 插件需要用 C++ 编写,但可以使用 JavaScript 驱动其行为。首先需要创建一个 ActiveX 控件,然后在控件中嵌入 IE 的 COM 组件。 2. 部署插件代码: 将插件代码打包成 CAB 文件,然后将 CAB 文件嵌入网页中。这样每次访问该网页时,IE 浏览器…

    JavaScript 2023年5月27日
    00
  • JSP对URL链接中的中文乱码处理方法总结

    下面我将为您详细讲解“JSP对URL链接中的中文乱码处理方法总结”的完整攻略。 一、问题背景 在JSP中,当我们需要传递中文参数时,URL链接中的中文会出现乱码。这是因为URL中只支持ASCII码,而中文字符不属于ASCII码范围内。因此需要对中文参数进行编码处理,以保证URL链接能够正确传递中文参数。 二、解决方案 1、使用URLEncoder/URLDe…

    JavaScript 2023年5月19日
    00
  • 闭包

    闭包理解 如何产生闭包 当一个嵌套的内部(子)函数引用了嵌套外部(父)函数的变量(函数)时–就产生了闭包 闭包是什么 使用chrome调试查看 理解一 — 闭包是嵌套的内部函数 理解二 — 闭包是包含被引用变量(函数)的对象 闭包存在于嵌套的内部函数中 产生闭包的条件 函数嵌套 内部函数引用了外部函数的数据(变量或函数) <script> …

    JavaScript 2023年4月25日
    00
  • Vue-Router基础学习笔记(小结)

    下面是针对“Vue-Router基础学习笔记(小结)”的完整攻略: Vue-Router基础学习笔记(小结) 什么是Vue-Router Vue-Router是Vue.js的路由管理库,专门提供路由功能实现SPA(Single Page Application, 单页应用)。它去掉了传统的同步方式,采用异步加载组件,一定程度上提高了web应用的速度和流畅度。…

    JavaScript 2023年6月11日
    00
  • JS构造一个html文本内容成文件流形式发送到后台

    实现JS构造一个html文本内容成文件流形式发送到后台,我们可以通过以下步骤完成: 构造HTML文本内容 我们可以使用字符串拼接的方式构造HTML文本内容。例如,我们可以通过以下代码构造一个简单的HTML文本内容: const htmlContent = ` <!DOCTYPE html> <html> <head> &l…

    JavaScript 2023年5月27日
    00
  • javascript实现json页面分页实例代码

    首先讲解一下如何使用JavaScript实现JSON数据的页面分页。 一、前置知识 在使用JavaScript实现JSON分页前,需要先掌握一些前置知识: AJAX:用于实现异步的数据传输。 JSON:JavaScript Object Notation,一种轻量级的数据交互格式。 二、代码实现 1. 引入jQuery库 在实际应用中,我们常常使用jQuer…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部