对项目中的有些空值判断进行容错处理,例如三目运算、|、&、if else 等,下面有几个处理空值的方法:
!
用 ! 做类型判断,通常用来与变量求布尔值,除了 null、undefined、0、NaN 和空字符串为 true 之外,其余都为 false。
// 都为 true
!null
!undefined
!''
// 都为false
!100
!'hello'
!!
!! 用来做类型判断,对第一次 ! 操作后的类型进行取反,可以简化 null、undefined和空字符串的判断逻辑。
var a
if (a != null && typeof(a) != undefined && a != '') {...}
// 简写为
if (!!a) {...}
可选链(.?)
let a
let b
if (!!a) {
b = a.name
}
// 相当于
let b = a?.name
通常用来判断对象的某个属性的兼容问题
let list = res && res.data && res.data.rows
// 相当于
let list = res?.data?.rows
空值合并运算符(??)
除了 undefined、null 之外的值等于 c,否则为 a
let b
let a = 0
let c = { name: 'zhangsan' }
if (!!a || a === 0) {
b = a
} else {
b = c
}
// 相当于
b = a ?? c
只有左侧为 null 和 undefined 时,才返回右侧的数.
console.log("" || "xx") // xx
console.log(0 || "xx") // xx
console.log(null || "xx") // xx
console.log(undefined || "xx") // xx
console.log("" ?? "xx") // ''
console.log(0 ?? "xx") // 0
console.log(null ?? "xx") // xx
console.log(undefined ?? "xx") // xx
空值赋值运算符(??=)
仅在左侧为 null 或 undefined 时对其赋值.
let i = 'hello'
let a = ''
let b = 0
let c = NaN
let d = null
let e = undefined
a ??= i; // a = ''
b ??= i // b = 0
c ??= i // c = NaN
d ??= i // d = 'hello'
e ??= i // e = 'hello'