【问题标题】:How does one achieve ternary assignment in Javascript?如何在 Javascript 中实现三元赋值?
【发布时间】:2021-02-11 03:08:16
【问题描述】:

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

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

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

我希望能够使用真值/假值编写类似以下内容的内容。如果this.foo 为真,则分配"";否则,分配"foo"

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

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

【问题讨论】:

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

标签: javascript typescript variable-assignment conditional-operator assignment-operator


【解决方案1】:

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

foo = foo || otherCondition;

所以简写的简写,在我看来不是太有用。

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

【讨论】:

    【解决方案2】:

    你必须使用 IF ELSE 而不是使用三元语句, if else 可以让您更好地控制其下编写的语句,并且使用效率高。

    【讨论】:

    • 感谢您的回复,但这并不能解决我写两次this.foo 的问题。一次将在 if 语句条件内,另一个将分配变量。
    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 2011-07-02
    • 2021-11-23
    • 2020-03-03
    • 2013-04-05
    • 1970-01-01
    • 2015-09-30
    • 2021-04-29
    相关资源
    最近更新 更多