这个速记运算符发生了什么?

时间:2016-01-22 23:00:30

标签: javascript performance shorthand

我想在速记方面做得更好。有人可以帮助澄清下面的内容吗?

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

是否,如果obj有标题然后将其添加到消息中,否则它为空?

2 个答案:

答案 0 :(得分:2)

正如评论中所指出的,这是一个ternary operator。这是一个非常奇怪的使用,因为它实际上没有使用'其他'操作员的一部分用于任何有用的东西,并且更清楚地写成:

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

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

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

答案 1 :(得分:0)

如果obj有标题然后将其添加到邮件中你是对的,但要严格,你应该知道obj.getValue("title")的值不应该falsy0, 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