typescript 空合并运算符的反义词

lvmkulzt  于 2023-08-07  发布在  TypeScript
关注(0)|答案(6)|浏览(140)

如果变量不是nullundefined,空合并运算符允许分配变量,否则允许分配表达式。

a = b ?? other

字符串
这是对以前使用的||的改进,因为如果b是空字符串或其他falsy,但不是null值,||也会分配other。
但是,有时我们也使用&&进行赋值,例如

a = b && func(b)


这里我们只想在b上执行func,如果它不是空的,否则分配空的b
当然,&&检查的是虚假性,而不是无效性。&&有空版本吗?

zlwx9yxi

zlwx9yxi1#

据我所知,没有这样的运算符,也没有proposal来添加一个。相反,你可以依靠标准的方法来检查null值:第一个月

a = b == null ? b : func(b)

字符串

xyhw6mcr

xyhw6mcr2#

这不会回答这个问题,因为它已经由@str回答了,我只是在这里发布这个,因为我没有足够的代表评论@Dalou的答案,不希望人们在这个答案上绊倒。

a = (b ?? false) && other

字符串
不是??的相反,因为如果b是一个非undefined/null的falsy值,例如''0,则a将采用b的值。与??相反,即使b''0,也应该将a设置为other的值。

ev7lccsx

ev7lccsx3#

回答:

let a = 9;

if( a!==null || a!==undefined ){ /* actions */ };

if( (a??null) !== null ){ /* actions */ }

字符串
建议:

const oo = console.log;
let a; // undefined, null

// Syntax proposal: !?
a !? oo('NOT Nullish coalescing operator');

// Logical NOT Nullish assignment:
let a = 7;
a !?= 5;
oo(a); // 5

let b, c = null;
b !?= 3;
oo(b); // undefined
c !?= 8;
oo(c); // null

eiee3dmh

eiee3dmh4#

我不喜欢,但我的解决方案是:

output = typeof input === 'boolean' && "other"

字符串
真值表:

input     -> output
--------------------
null      -> false
undefined -> false
true      -> "other"
false     -> "other"

uajslkp6

uajslkp65#

正如其他人已经指出的那样,目前还没有这样的运营商。然而,在官方TC39讨论组中有一些关于这个运算符的建议:

如果您有兴趣将其引入ECMA,这些可能是很好的起点。

gxwragnw

gxwragnw6#

我今天刚发现这篇文章,我想在上面加上我的几句话。
inverse null coalescing operator is in the proposal

a = b !? func(b)

字符串
我不认为这个建议会被实现,这是一个必须具备的功能,因为我们可以简单地通过&&||操作符获得所需的行为。??的添加是一个特殊的功能,是一个必须拥有的功能。这只是我的意见。
我不认为我们应该等待比简单地使用like:

a = func(b??false)


我们只需要有创造力!我在这里直接在函数调用中使用了nullish合并运算符,因此我们避免了像这样反转它的需要:

a = b != null && func(b) or so on


所以,我认为!?是完全不必要的。我们只需要正确地思考它。
“Something not null then have it”可以简单地用null合并运算符表示:(HAVE_IT??false)||(HAVE_IT?0)||(HAVE_IT?ANYTHING_YOU_WANT_EXCEPT_NULL)。

相关问题