【问题标题】:What is going on in this shorthand operator?这个速记运算符发生了什么?
【发布时间】:2016-04-29 16:22:44
【问题描述】:

我正在努力提高速记能力。有人可以帮助澄清以下内容吗?

(obj.getValue("title")) ? message += "\ntitle: " + obj.getValue("title") : null;

是不是,如果 obj 有标题,则将其添加到消息中,否则为 null?

【问题讨论】:

  • 你明白了!您正在查看的是ternary operator
  • 说实话,三元运算符的用法很奇怪,这会更清楚地写成 if 语句
  • 同意@aw04。很确定 null 只是用来填充 else 语句,只是让事情变得复杂。单行 if 语句会更有意义。
  • 我很好奇这是在哪里找到的。
  • @CoolShape null 在这里实际上并没有做任何事情,它在那里是因为它是三元运算符的一部分(这就是为什么我说它对运算符的使用不好)。因此,要将其写为 if 语句,您将完全省略 else

标签: javascript performance shorthand


【解决方案1】:

正如 cmets 中所指出的,这是一个 ternary operator。这是一个非常奇怪的用法,因为它实际上并没有将运算符的“else”部分用于任何有用的东西,并且更清楚地写成:

if (obj.getValue("title")) {
    message += "\ntitle: " + obj.getValue("title");
}

只要obj.getValue("title")是“truthy”,就会修改message

如果这是您拥有的代码,请借此机会使代码更清晰。

【讨论】:

    【解决方案2】:

    如果 obj 有标题然后将其添加到消息中,您是对的,但严格来说,您应该知道 obj.getValue("title") 的值不应该是 falsy (0, null, undefined, '', NaN, false) 才能通过条件。

    你也可以在这里使用其他选项

    obj.getValue("title") && (message += "\ntitle: " + obj.getValue("title"));
    

    如果obj.getValue("title") 具有truthy 值,则将执行第二个括号中的操作。 您也可以创建对obj.getValue("title") 的引用。

    var title = obj.getValue("title");
    title && (message += "\ntitle: " + title);
    

    在这种情况下,getValue 方法只执行一次更好。

    简写+=obj.getValue("title") 的值添加到message

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2012-11-12
      • 2018-02-22
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多