如果变量不是null
或undefined
,空合并运算符允许分配变量,否则允许分配表达式。
a = b ?? other
字符串
这是对以前使用的||
的改进,因为如果b
是空字符串或其他falsy,但不是null值,||
也会分配other。
但是,有时我们也使用&&
进行赋值,例如
a = b && func(b)
型
这里我们只想在b
上执行func
,如果它不是空的,否则分配空的b
。
当然,&&
检查的是虚假性,而不是无效性。&&
有空版本吗?
如果变量不是null
或undefined
,空合并运算符允许分配变量,否则允许分配表达式。
a = b ?? other
字符串
这是对以前使用的||
的改进,因为如果b
是空字符串或其他falsy,但不是null值,||
也会分配other。
但是,有时我们也使用&&
进行赋值,例如
a = b && func(b)
型
这里我们只想在b
上执行func
,如果它不是空的,否则分配空的b
。
当然,&&
检查的是虚假性,而不是无效性。&&
有空版本吗?
6条答案
按热度按时间zlwx9yxi1#
据我所知,没有这样的运算符,也没有proposal来添加一个。相反,你可以依靠标准的方法来检查null值:第一个月
字符串
xyhw6mcr2#
这不会回答这个问题,因为它已经由@str回答了,我只是在这里发布这个,因为我没有足够的代表评论@Dalou的答案,不希望人们在这个答案上绊倒。
字符串
不是
??
的相反,因为如果b
是一个非undefined/null的falsy值,例如''
或0
,则a
将采用b
的值。与??
相反,即使b
是''
或0
,也应该将a
设置为other
的值。ev7lccsx3#
回答:
字符串
建议:
型
eiee3dmh4#
我不喜欢,但我的解决方案是:
字符串
真值表:
型
uajslkp65#
正如其他人已经指出的那样,目前还没有这样的运营商。然而,在官方TC39讨论组中有一些关于这个运算符的建议:
如果您有兴趣将其引入ECMA,这些可能是很好的起点。
gxwragnw6#
我今天刚发现这篇文章,我想在上面加上我的几句话。
inverse null coalescing operator is in the proposal:
字符串
我不认为这个建议会被实现,这是一个必须具备的功能,因为我们可以简单地通过
&&
和||
操作符获得所需的行为。??
的添加是一个特殊的功能,是一个必须拥有的功能。这只是我的意见。我不认为我们应该等待比简单地使用like:
型
我们只需要有创造力!我在这里直接在函数调用中使用了nullish合并运算符,因此我们避免了像这样反转它的需要:
型
所以,我认为
!?
是完全不必要的。我们只需要正确地思考它。“Something not null then have it”可以简单地用null合并运算符表示:(HAVE_IT??false)||(HAVE_IT?0)||(HAVE_IT?ANYTHING_YOU_WANT_EXCEPT_NULL)。