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

yizhihongxing

让我来详细讲解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日

相关文章

  • Javascript 使用function定义构造函数

    Javascript 使用function定义构造函数 在Javascript中,我们可以使用function来定义一个构造函数,从而创建对象实例。这种方式被称为使用构造函数模式。 定义构造函数 定义一个构造函数很简单,只需要使用function关键字,紧接着是函数名和括号,然后在函数体内部定义对象的属性和方法即可。 function Person(name…

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

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

    JavaScript 2023年5月27日
    00
  • javascript中验证大写字母、数字和中文

    要在 JavaScript 中验证大写字母、数字和中文,可以使用正则表达式(RegExp)。下面是完整的攻略: 步骤 1:编写正则表达式 使用正则表达式是验证输入是否符合要求的常用方法。以下是一个匹配大写字母、数字和中文的正则表达式: /^[A-Z0-9\u4e00-\u9fa5]+$/ ^ 表示匹配开头 $ 表示匹配结尾 [A-Z] 表示匹配 A 至 Z …

    JavaScript 2023年6月10日
    00
  • JS数组方法join()用法实例分析

    JS数组方法join()用法实例分析 在 JavaScript 中,数组是一种常用的数据结构。而 join() 方法可以将数组中所有元素转化为一个字符串,并返回这个字符串。本文将详细讲解 join() 方法的具体用法及示例。 语法 array.join(separator) 参数: separator:可选。指定每个元素被转换为字符串后,元素之间使用的字符串…

    JavaScript 2023年5月27日
    00
  • 上周日为开始日,本周六为结束日,这一周在一年中的所在周数

    function getWeekNumber(date) { // 创建表示周日的新 Date 对象并获取其时间戳 const sunday = new Date(date.getFullYear(), date.getMonth(), date.getDate() – date.getDay()); const sundayTimestamp = sund…

    JavaScript 2023年4月24日
    00
  • javascript中Function类型详解

    首先我们来讲解一下JavaScript中的函数类型。函数是JavaScript语言中非常重要的一种数据类型,它可以接收参数并返回值。在JavaScript中,函数也是一个对象类型,可以和其他对象(如字符串、数组等)一样,被创建、调用和销毁。 一、函数的声明与调用 1.1 函数的声明 在JavaScript中,可以使用函数声明的方式来创建一个函数。函数声明的语…

    JavaScript 2023年5月27日
    00
  • JS正则表达式验证端口范围(0-65535)

    下面是JS正则表达式验证端口范围的攻略: 题目描述 要求用JS正则表达式验证给定的端口范围是否符合规范,即端口号范围应该为0-65535。 解法 我们可以使用正则表达式来判断给定的端口范围是否符合要求。 正则表达式的规则如下: 端口号的范围为0-65535; 0开头的数字只能为0; 1-9开头的数字可以是单个1-9,两位数字或三位数字; 数字不能有前导0。 …

    JavaScript 2023年6月10日
    00
  • 详谈表单格式化插件jquery.serializeJSON

    下面是关于详谈表单格式化插件jquery.serializeJSON的完整攻略。 什么是jquery.serializeJSON插件? jquery.serializeJSON插件是一个可以将表单数据转换为JSON格式的jQuery插件。在提交表单时,我们经常需要将表单数据打包成JSON格式进行传输。因此,这个插件可以帮助我们快速、便捷地实现这个功能。 插件…

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