iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中有哪些魔法运算符
  • 547
分享到

JavaScript中有哪些魔法运算符

2023-06-14 23:06:14 547人浏览 八月长安
摘要

javascript中有哪些魔法运算符?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。javascript是一种什么语言javascript是一种动态类型、弱类型的语言,基于

javascript中有哪些魔法运算符?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

javascript是一种什么语言

javascript是一种动态类型、弱类型的语言,基于对象和事件驱动并具有相对安全性并广泛用于客户端网页开发的脚本语言,同时也是一种广泛用于客户端web开发的脚本语言。它主要用来给html网页添加动态功能,现在JavaScript也可被用于网络服务器,如node.js

1. 可选链运算符

之前当我们想要使用某个结构比较深的属性,同时又无法确定所有的父级一定存在时,我们需要进行一连串的判断,例如一个数据结构

const student = {  score: {    math: 98,  },};

我们想要获取最内层的 math 属性的值时:

if (student && student.score) {  console.log(student.score.math);}

1.1 获取深层次的属性

不过当我们使用可选链运算符后,判断就简单很多了,可选链运算符会在链路上遇到 null 或者 undefined 时,直接返回 undefined,而不会抛出错误异常:

console.log(student?.score?.math);

1.2 执行一个可选的方法

同时在执行一个可能存在的函数时,也可以用到。例如一个 React 组件中,传入的方法是可选的:

// getScore 是一个可选参数,要么是 undefined,要么是一个函数const Student = ({ getScore }: { getScore?: () => void }) => {  useEffect(() => {    // 当 getScore 存在时,正常执行 getScore()方法    getScore?.();  }, []);  return <div></div>;};

或者我们执行一个 dom 元素的方法时,也可以使用。

document.querySelector 会返回两种类型,当 dom 元素真实存在时会返回该元素,否则返回 null。写过 typescript 的都知道,当我们要调用某个方法时,总是要先确定该 dom 元素是存在的:

const dom = document.querySelector('.score');if (dom) {  dom.getBoundinGClientRect(); // 当 dom 元素存在时,才执行该方法}

使用可选链操作符时,就直接调用即可:

document.querySelector('.score')?.getBoundingClientRect();

1.3 获取数组中的值

数组存在,则获取某个下标的值,我们现在也不用再判断数组是否存在了,可以直接使用:

arr?.[1]; // 若 arr 存在时,则正常获取 arr[1]中的值

上面的 3 种情况也是可以组合使用的。若一个结构比较复杂时,各种类型都有,这里我们要执行数组 math 下标 2 的方法:

const student = {  score: {    math: [      98,      67,      () => {        return 99;      },    ],  },};

执行:

student?.score?.math?.[2]?.(); // 99

还有这种操作?

1.4 无法进行赋值操作

可选链运算符只能执行获取操作,是无法进行赋值操作的。

例如给一个可能的数组或者 dom 元素赋值时,会直接抛出语法异常:

arr?.[1] = 2; // xdocument.querySelector('.score')?.innerHTML = 98; // x

当我们执行上面的语句时,会抛出如下的提示:

Uncaught SyntaxError: Invalid left-hand side in assignment

即不能给左侧的可选链进行赋值操作。

2. 双问号运算符

双问号运算符??,我理解是为了解决或运算符||而设计出来的。

我们先来回顾下或运算符的操作,当左侧的数据为假值(数字 0, 布尔类型的 false,空字符串,undefined, null)时,则执行右侧的语句。

false || 123;0 || 123;'' || '123';undefined || 123;null || 123;

可是在有些情况下,false 和 0 都是正常的值,但若使用或运算符时,会导致出错。

比如下面的这个例子,当 score 为空时,则默认值为 1。当输入正常值 0 时应当返回 0(但实际上返回了 1):

const getSCore = (score: number) => {  return score || 1;};getScore(0); // 1

这时,我们就用到了双问号运算符??。双问号运算符只会在左侧为 undefined 或者 null 时,才会执行右侧的语句。

const getSCore = (score: number) => {  return score ?? 1;};getScore(0); // 0

同时,双问号运算符还可以与=结合成为一个赋值操作,当左侧为 null 或者 undefined 时,则将右侧语句的结果赋值给左侧的变量:

score ??= 1; // 1

我读书多,不会骗你

3. 或运算和与运算的赋值操作

我们在之前使用或运算符进行赋值操作时,是这样写的:

score = score || 1;age = age && 24;

现在可以直接简写成:

score ||= 1; // 等同于 score = score || 1age &&= 24; // 等同于 age = age && 24

4. 双星号运算符

双星号运算符**是比较早引入到 js 中的,只是我们用到的比较少而已。其实它执行的是一个幂运算,等同于 Math.pow()。

2 ** 10; // 1024, 2的10次方,等同于 Math.pow(2, 10);

关于JavaScript中有哪些魔法运算符问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: JavaScript中有哪些魔法运算符

本文链接: https://www.lsjlt.com/news/275704.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作