首页 > 其他分享 >js中.?、??、??=的用法和含义

js中.?、??、??=的用法和含义

时间:2022-10-29 22:00:21浏览次数:100  
标签:属性 undefined 含义 js 用法 运算符 let null name

一、可选链(.?)

如果一个值为null、或者是undefined

那么我们再去用点操作符去调用一个方法或者访问一个属性会发生什么?

其实这种情况就相当于直接在undefined上面访问name属性.

undefined和null是两个比较特殊的数据类型,是不能用点操作符去访问属性的.

那么在一个变量可能为null、或者undefined的时候,恰巧我又需要访问这个变量的一个属性,那我们应该这样做

let a;
let b;
if(!!a){
    b = a.val;
}else{
    b = undefined;
}

只有当a存在的时候,我才会去访问a的name属性.

我们可以看到,这样一个简单的逻辑,我们就要写这么多的东西,那么有没有简单的写法呢?

可选链就可以简化上述代码,如下

let a;
let b = a?.val;

有了?.,我们就可以一直套下去b = a?.val?.haha?.就是不报错.

二、空值合并运算符(??)

有了上面的例子,接下来我们简单一点,直接上举例

let b;
let a = 0;
let c = { name:'echohye' }

if(!!a || a === 0 ){
  b = a;
}else{
  b = c;
}

当我们想判断一个值存在,但是它等于0的时候,我们也需要当作它存在,于是就有了上面那样的例子,其实我们还可以这样做

let b;
let a = 0;
let c = { name:'buzhimingqianduan' }
b = a ?? c;

上面的例子,当a除了undefinednull之外的任何值,b都会等于a,否则就等于c.

那么,当我们使用三元运算符时,a = b?b:c,只要b等于nullundefined,我们就可以简化成a=b??c.

三、空值赋值运算符(??=)

和前面的例子类似

let b = '你好';
let a = 0
let c = null;
let d = ’123‘
b ??= a;  // b = “你好”
c ??= d  // c = '123'

当??=左侧的值为nullundefined的时候,才会将右侧变量的值赋值给左侧变量.

其他所有值都不会进行赋值.

在一些场景下,可以省略很多代码.

js中.?、??、??=的用法和含义

标签:属性,undefined,含义,js,用法,运算符,let,null,name
From: https://www.cnblogs.com/echohye/p/16839989.html

相关文章

  • 【JS】数据类型检测
    数据类型检测方法:  1.typeof  2.instanceof  3. Object.prototype.toSting.call()/*1.typeof运算符返回值:参数类型字符串-可以区分基本数......
  • ZABBIX中常用术语的含义
    概述本章将一一解释一些Zabbix中常用术语的含义。定义主机(host)- 你想要监控的联网设备,有IP/DNS。主机组(hostgroup)- 主机的逻辑组;可能包含主机和模板。一个主机组......
  • 深入 Slate.js 编辑器 - 引言
    深入Slate.js编辑器-引言钉钉文档阿里巴巴-智能协同与视频云-钉钉文档团队​关注他 54人赞同了该文章我们是钉钉的文档协同团队,我们在......
  • JS CSS HTML 加载顺序
    JSCSSHTML加载顺序 解析:运行代码加载:下载代码JS脚本(因为js修改DOM,所以需要先js解析)script标签:阻塞html文档的解析,直到脚本执行完外引js:先网络......
  • html,css,js加载顺序
    <headlang="en"><metacharset="utf-8"><title></title><linkrel="stylesheet"href="css/*.css"><scriptsrc="js/*.js></script></head>DOM文......
  • Plot函数用法详解——R语言
    plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键,所以就详细来看看plot的所有可设置参数及参数设置方法。R语言的基础绘图系统主......
  • 【JS】扩展内建类 - Symbol.species
    species是个函数值属性,其被构造函数用以创建派生对象,species访问器属性允许子类覆盖对象的默认构造函数。 JS内建类可以被扩展classMyArrayextendsArray{......
  • js 字符串中包含逗号和分号分析成数组
    varstr="117.39755436808615,34.59211450864094;117.39783481906638,34.59185738594207;117.39825396841732,34.59151467824745;117.39895365857903,34.5909999082......
  • matlab 中fft的用法
    一.调用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)用MATLAB进行谱分析时注意:(1)函数FFT返回值的数据结构具有对称性。例:N=8;n=0:N-1;xn=[43267890];Xk=fft(xn)→Xk......
  • js 数组-过滤数据
    js数组-过滤数据filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测。注意:filter()不会改......