与无效合并运算符相反
Opposite of nullish coalescing operator
Nullish 合并运算符允许分配一个变量,如果它不是 null
或 undefined
,否则是一个表达式。
a = b ?? other
这是对以前使用的 ||
的改进,因为如果 b
是空字符串或其他虚假值,但不是无效值,||
也会分配其他值。
但是,有时候,我们也用&&
来赋值,比如
a = b && func(b)
我们只想在 b
上执行 func
如果它不是空值,否则分配空值 b
.
当然,&&
检查的是虚假性,而不是无效性。是否有 &&
的无效版本?
据我所知,没有这样的运算符,也没有 proposal to add one. Instead you can rely on the standard way to check for nullish values: b == null
a = b == null ? b : func(b)
这不会回答这个问题,因为它已经被@str 回答了,我只是在这里发布这个,因为我没有足够的代表来评论@Dalou 的回答并且不希望人们绊倒那个答案。
a = (b ?? false) && other
不是 ??
的反义词,因为如果 b
是 undefined/null 以外的假值,a
将取 b
的值,例如 ''
或 0
。
??
的反面应将 a
设置为 other
的值,即使 b
是 ''
或 0
.
我不喜欢,但这是我的解决方案:
output = typeof input === 'boolean' && "other"
真相table:
input -> output
--------------------
null -> false
undefined -> false
true -> "other"
false -> "other"
Nullish 合并运算符允许分配一个变量,如果它不是 null
或 undefined
,否则是一个表达式。
a = b ?? other
这是对以前使用的 ||
的改进,因为如果 b
是空字符串或其他虚假值,但不是无效值,||
也会分配其他值。
但是,有时候,我们也用&&
来赋值,比如
a = b && func(b)
我们只想在 b
上执行 func
如果它不是空值,否则分配空值 b
.
当然,&&
检查的是虚假性,而不是无效性。是否有 &&
的无效版本?
据我所知,没有这样的运算符,也没有 proposal to add one. Instead you can rely on the standard way to check for nullish values: b == null
a = b == null ? b : func(b)
这不会回答这个问题,因为它已经被@str 回答了,我只是在这里发布这个,因为我没有足够的代表来评论@Dalou 的回答并且不希望人们绊倒那个答案。
a = (b ?? false) && other
不是 ??
的反义词,因为如果 b
是 undefined/null 以外的假值,a
将取 b
的值,例如 ''
或 0
。
??
的反面应将 a
设置为 other
的值,即使 b
是 ''
或 0
.
我不喜欢,但这是我的解决方案:
output = typeof input === 'boolean' && "other"
真相table:
input -> output
--------------------
null -> false
undefined -> false
true -> "other"
false -> "other"