可选链操作符、逻辑与、空值合并运算符
可选链操作符(?.)
首先我们的明白一点,以下代码会报错吗?
let obj = {}
let a = obj.name
console.log(a);
那么,以下代码呢?
let obj = {}
let a = obj.name.firstName
console.log(a);
再有这个呢?
let obj = {}
let a = obj.name?.firstName
console.log(a);
这个输出什么?
let obj = {
name: 'jack'
}
let a = obj.name?.firstName
console.log(a);
?.
操作符的功能类似于.
链式操作符,不同之处是,在 undefined.xxx 的时候不会抛出异常,它只是返回 undefined,这就是它的神奇之处没有异常,就意味着代码不会挂
它跟 逻辑与(&&) 类似,但可选链操作符更短、更简明
逻辑与(&&)
猜猜它会输出什么?
let obj = {
name: 'jack'
}
let a = obj.name && obj.name.firstName
console.log(a);
空值合并运算符(??)
当左侧的操作数为 null
或者 undefined
时,返回其右侧操作数,否则返回左侧操作数。
布尔转换(!!)
let boolean = !!sessionStorage.getItem('token')
// 相当于
let boolean = sessionStorage.getItem('token') ? true : false
字面意思,就是将 null
、''
、undefined
等一些值转换为它们对应的 true 或 false。比如 null
,!!null
就是先 !null
,得到 true
,然后再 !true
,最终得到 false
在js中( if 判断时),以下内容会被当成 false 处理:
'', false, 0, null, undefined, NaN
以上内容都可以在 MDN 搜到的,使用以上操作符的目的主要是让代码不报异常,类似于 cb && cb() 的例子除外
这一路,灯火通明