与零合并运算符相对



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

a = b ?? other

这是对以前使用的||的改进,因为如果b是空字符串或其他错误值,||也将分配其他值,但不是零值。

然而,有时,我们也会使用&&进行值分配,例如

a = b && func(b)

其中,我们只想在b上执行func,如果它不是零,否则分配零b

当然,&&检查的是伪,而不是无效。&&是否有无效版本?

据我所知,没有这样的运算符,也没有添加运算符的建议。相反,您可以使用标准的方法来检查无效值:b == null

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

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

a = (b ?? false) && other

不是与??相反,因为如果b是除undefined/null之外的伪值,则a将取b的值,例如''0??的相反方应将a设置为other的值,即使b''0

答案:

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

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

  • 'maybe'运算符补码??操作员
  • 可选投影/表达式运算符-例如maybeNullish?:转换(maybeNulish(
  • [语法]反向null合并运算符

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

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

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

真相表:

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

我今天刚刚找到这篇文章,我想在上面加上我的几句话。

尽管,反零合并算子在提议中:

a = b !? func(b)

我认为这个提议不会被实现,并且是一个必须具备的功能,因为我们可以简单地使用&&||运算符来获得所需的行为。??的添加是一个特殊的特性,也是一个必须具备的特性。这只是我的看法。

我认为我们不应该等待简单地使用类似:

a = func(b??false)

我们只需要有创造力!我在这里直接在函数调用中使用了零合并运算符,所以我们避免了反转它的需要,比如:

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

因此,我认为!?是完全没有必要的。我们只需要正确思考。

"不为空的东西就有它";可以简单地用零合并运算符表示:(HAVE_IT??false(||(HAVE-IT??0(||。

相关内容

  • 没有找到相关文章

最新更新