JavaScript中?. 和??分别是什么详解

让我来详细讲解JavaScript中?.和??的使用。

?.运算符

?.运算符是ES2020(也称为ES11)中的新功能,它是用于简化可选链式调用的一种语法糖。可选链式调用允许我们选择性地访问一个对象的属性,它避免了访问未定义的对象属性时出现的TypeError错误。

示例1:

const user = {
  name: 'Tom',
  age: 25,
  address: {
    city: 'Shanghai'
  }
};

// 使用可选链式调用
const city = user?.address?.city;
console.log(city);  // 'Shanghai'

// 如果访问的属性不存在,会返回undefined,而不是TypeError错误
const gender = user?.gender?.male;
console.log(gender);  // undefined

// 当我们访问属性时,在属性名之前使用问号(?),它表示如果对象存在该属性,则访问该属性,否则返回undefined。

示例2:

const phone = user.phone?.model;
console.log(phone);  // undefined

// phone是undefined,因为user对象中没有phone属性。

在上面的示例中,我们尝试访问一个未定义的属性phone,?在属性名之前表示如果该对象存在该属性,则访问该属性,否则返回undefined。

??运算符

??运算符也是ES2020中的一个新特性,它是用于提供默认值的一种语法糖。当左侧的操作数为null或undefined时,它会使用右边的操作数作为默认值。

示例1:

const name = null ?? 'defaultName';
console.log(name);  // 'defaultName'

const age = undefined ?? 30;
console.log(age);  // 30

在上面的示例中,如果左侧的值为null或undefined,则使用右侧的默认值。name被赋值为默认名称defaultName,而age被赋值为默认年龄30。

示例2:

const price = 0 ?? 10;
console.log(price);  // 0

// price被赋值为0,因为0不是null或undefined

在上面的示例中,左侧的值为0。请注意,0被视为有效值,因此该值被用作price的值,并且使用默认值10的操作数没有被使用。

希望上述示例已经让你对?.和??运算符有了更加清晰的理解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中?. 和??分别是什么详解 - Python技术站

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

相关文章

  • 基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)

    首先讲一下所需工具: touch.js:一款轻量级的移动端手势库,用于实现图片的缩放、滑动等手势操作; Zepto.js:一款轻量级的JavaScript库,可用于DOM操作、事件绑定等常见操作。 如果你已经准备好了这些工具,接下来我们就可以开始制作基于touch.js和Zepto.js的图片查看器了。 步骤一、创建HTML结构 首先我们需要先创建出HTML…

    JavaScript 2023年6月11日
    00
  • javascript编程必备_JS语法字典

    JavaScript编程必备_JS语法字典 介绍 本篇文章是一份JavaScript语法字典,旨在为初学者提供参考,帮助他们了解和掌握JavaScript的基础语法。 数字类型 JavaScript中的数字类型是通过Number构造函数表示的。以下是一些常见的数字类型操作和方法: 创建数字类型 在JavaScript中创建数字类型可以使用数字字面量或Numb…

    JavaScript 2023年5月18日
    00
  • js+ajax实现的A*游戏路径算法整理

    关于“js+ajax实现的A*游戏路径算法整理”的完整攻略,以下是详细介绍(注意,为了方便阅读,带有代码块的内容使用了代码语法高亮): 什么是A*算法? A*算法是一种基于图形、搜索和启发式运算的寻路算法,通常用于从起点到目标点的最优路径搜索。 A*算法的要点 A*算法将费用(距离、代价)与启发式函数两者结合,来评估当前节点到目标点路径的可能代价大小。其中启…

    JavaScript 2023年5月28日
    00
  • js中setTimeout的妙用–防止循环超时

    下面是关于 setTimeout 防止循环超时的详细攻略。 原理 在 JavaScript 中,循环时如果耗时过长就可能导致页面卡顿或者浏览器崩溃。为了避免这种情况,可以使用 setTimeout 函数来将循环分批进行处理,从而降低其对页面性能的影响。 setTimeout 函数用于在延时一定时间后执行指定的函数,可以接受两个参数,分别是要执行的函数和延迟的…

    JavaScript 2023年5月28日
    00
  • 图解JavaScript作用域链底层原理

    下面就为大家讲解一下“图解JavaScript作用域链底层原理”的完整攻略。 什么是作用域链? 作用域链指的是在 JavaScript 中,用于查找变量的一种机制。在 JavaScript 中,每个函数都有一个作用域链,它是由多个执行上下文(Execution Context)(如全局上下文、函数上下文等)的变量环境引用组成的链式结构。在查找变量时,Java…

    JavaScript 2023年6月10日
    00
  • Ajax高级笔记 JavaScript高级程序设计笔记

    《Ajax高级笔记》和《JavaScript高级程序设计笔记》是两本非常优秀的前端技术书籍,适合有一定编程基础的人群进行阅读。下面是对这两本书的攻略说明。 Ajax高级笔记攻略 了解Ajax Ajax (Asynchronous JavaScript + XML),意思是利用JavaScript在不刷新页面的前提下与服务器端进行数据交互,实现前后端数据的异步…

    JavaScript 2023年5月18日
    00
  • JSON中key动态设置及JSON.parse和JSON.stringify()的区别

    JSON中key动态设置指的是在JavaScript中向JSON对象动态添加属性名(key),这样的JSON对象在另一个需要使用这些属性的函数或者方法中外部作用域仍然可以进行访问。但在正常情况下,我们无法使用字符串拼接的方式来动态设置JSON中的key,这时候就需要借助ES6中的计算属性名(Computed Property Names)来实现。 计算属性名…

    JavaScript 2023年5月27日
    00
  • JavaScript中 ES6 generator数据类型详解

    JavaScript中 ES6 generator数据类型详解 什么是 generator? generator 是 ES6 中新增加的一种数据类型,它可以在函数执行的过程中暂停执行,并可以恢复执行。 在函数中使用 yield 关键字可以暂停函数的执行,同时可以通过 next() 方法恢复函数的执行。 使用 generator 可以方便地实现异步操作、迭代器…

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