如何在 Javascript 中实现三元赋值?

How does one achieve ternary assignment in Javascript?

提问人:Charles Kornoelje 提问时间:10/29/2020 最后编辑:Charles Kornoelje 更新时间:10/29/2020 访问量:463

问:

我想使用三元运算符在 Javascript(或 Typescript)中重新分配类变量。的重新分配取决于当前值,我可以使用以下内容进行更新:this.foothis.foo

setFoo = () => {
    this.foo = this.foo ? "" : "foo";
}

但是,我想知道我是否可以在不写两次的情况下进行重新分配。这将很有帮助,因为我正在尝试动态更新 Angular 组件(用 Typescript 编写)上的类。this.foothis.foo

我希望能够写出如下内容,其中使用了真实/虚假的价值观。如果是真实的,则被分配;否则,将分配:this.foo"""foo"

setFoo = () => {
    this.foo =? "" : "foo";
}

我尝试搜索类似的问题,但找不到答案。我最初的想法是使用 ??= Typescript 4.0 中的运算符,但我认为它不起作用。也许我理想的解决方案不存在,因为它可能是一个糟糕的编程习惯。谢谢

JavaScript TypeScript 条件运算 赋值运算符

评论

2赞 Iyashi 10/29/2020
唯一可能的是 和 .这不太符合您的需求,但仍然更短。this.foo = this.foo || ""this.foo = this.foo && ""
2赞 Nina Scholz 10/29/2020
三元是两个不同值的最短值。
1赞 Teemu 10/29/2020
为什么?三元本身已经够糟糕的了,尽管我现在发现自己更频繁地将它与 .不要缩小你的开发代码,当你将代码发布到生产环境时,让压缩器来执行此操作。const
1赞 Rick 10/29/2020
你写它的方式有效并且足够简洁。我看不出有任何理由想要缩短它。
1赞 Teemu 10/29/2020
我不认为两个 s 在该特定语法中是多余的,因为有两个运算符,并且两个运算符都需要它们的操作数。这种情况恰好在两个运算符的操作数中使用相同的变量。如果这种情况是,你不会认为这是多余的。对于您所追求的,我们需要一个全新的“检查和分配”运算符......this.xconst x = (y) ? 1 : 2;1

答:

0赞 Rizwan 10/29/2020 #1

您必须使用 IF ELSE 而不是使用三元语句, If else 会让你更好地控制写在它下面和高效使用的语句。

评论

0赞 Charles Kornoelje 10/29/2020
我很欣赏你的回应,但这并不能解决我两次写作的问题。一个将在 if 语句条件中,另一个将在分配变量。this.foo
1赞 jburtondev 10/29/2020 #2

好问题。不幸的是,这是不可能的。有些人使用一个速记版本,但它仍然包含重复:

foo = foo || otherCondition;

所以速记的速记,在我看来不太有用。

简短的回答:我会选择普通的三元。