持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
学习链接
简介
可选链 ?
可选链作用:
- 如果访问的内容为undefined,会报错
- 给该值添加一个 ?,可以避免这个错误,返回undefined
可选链使用场景
- 从后台获取数据,写入dom 中,比如图片的url
- dom是先加载的,这时候,后台数据还没有加载到 - 当前值就是undefined
- 也有可能后台没有当前值(没有当前图片的url) - 也是undefined
- 这样会报错
- 就可以用可选链进行判断了。(可选链,还可以三元运算,||,&& 来判断)
可选链实际使用
- 写在变量后面
- 如果参数不存在,也不会报错,返回undefined
- 短路运算,如果左边的不存在,也不会往后面走了!
- 可以用于(获取参数,获取dom,使用方法)
- 如果不存在,不会报错 - (不可以滥用,不然不知道错误在哪里。。)
// 可选链 获取参数 - 对象
let user = {}
alert( user?.address?.street ); // 返回undefined
alert( user?.[key])
// 可选链 获取dom
// 如果没有该dom, 返回undefined
let html = document.querySelector('.elem')?.innerHTML;
// 可选链 使用方法
let userGuest = {}
userAdmin.admin?.() // 没有该方法的话,啥也不发生。
可选链使用前提
- ? 问号前面的变量必须存在,
可选链和 &&,三元的比较
- 都能用于判断 是否为undefined。。
- 可选链更优雅
- 写的代码更少
- 低版本浏览器,可能不兼容。。。
// 如果值不存在的判断 - 为什么要判断,因为读取undefined的数据会报错。。。
let user = {}
user?.address?.street // undefined
user && user.address && user.address.street // undefined(不报错)
user ? user.address ? user.address.street : null : null // null
空值合并运算符 ??
空值运算符作用
- 用于判断数据
- 可选链 - 判断当前值是否存在(undefined)- 避免报错
- 空值运算符 - 判断真假 - (null 或 undefined 为假,其他都是真)
空置运算符使用场景
- 提供默认值
let user
alert(user ?? '111') // 111
let user = 'FFFFFF'
alert(user ?? '111') // FFFFF
和 || 的区别
- || 不能区分 (false, 0,"", null / undefined)
- || 找的的第一个有值的
- 使用 ?? 的话,false,0,""都能返回到了!(空字符串,也有值!返回空字符串。。。)
空值运算符优先级
- 优先级较低,要加()
空值合并运算符在
=和?运算前计算,但在大多数其他运算(例如+和*)之后计算。
- 和 && ,|| 一起使用
- 要加()
总结
最近获取后台数据的时候,用到了!就是没想到可以用可选链,还有,问题出在,后台数据还是空的的时候,基础要多看看。。。。
- 可选链 - 如果值不存在 - 不报错 - 使用后台数据的时候用到了,这个不存在,指的是,有可能数据为空,也有可能是数据还没来。。。
- 空置合并运算符,主要是可以判断 false,0,空字符串。如果需要这些值,可以判断。。一般都是转成字符串处理的。。
趁年少 别今朝 启程踏遍荒草 告别平凡 寻觅逍遥