我是否需要使用" ="什么时候使用? :JavaScript的快捷方式?

时间:2016-06-22 05:20:49

标签: javascript

有人可以告诉我这是否是有效的javascript来执行此操作:

        if (wf.statusId == Status.Dirty) {
            wf.createdDate
                ? promises.push(self.wordFormUpdateSubmit(wf, key))
                : promises.push(self.wordFormAddSubmit(wf, key));
        } 

如果未定义createdDate,是否会出现无法正常工作的情况?

以下是取代的内容:

        if (wf.statusId == Status.Dirty) {
            if (wf.createdDate) {
                var updatePromise = self.wordFormUpdateSubmit(wf, key);
                promises.push(updatePromise);
            } else {
                var addPromise = self.wordFormAddSubmit(wf, key);
                promises.push(addPromise);
            }
        }

也是一个相关的问题。是否可以使用相同的语法? :替换if(){}构造的需要吗?

5 个答案:

答案 0 :(得分:4)

除非=expr1返回某些内容并且您希望将其保存在其他变量中,否则不必将expr2与三元运算符一起使用。

在您的情况下,除非promises.push(self.wordFormAddSubmit(wf, key))promises.push(self.wordFormUpdateSubmit(wf, key))返回您要将其保存为变量的内容,否则无需=

答案 1 :(得分:2)

0

答案 2 :(得分:1)

wf.createdDate仅在未定义或具有值时才为true。所以这应该可以正常工作。

if (wf.statusId == Status.Dirty) {
            wf.createdDate
                ? promises.push(self.wordFormUpdateSubmit(wf, key))
                : promises.push(self.wordFormAddSubmit(wf, key));
        } 

此致 MK

答案 3 :(得分:1)

这是三元语句的一个示例,使用条件(三元)运算符,根据定义,它取代了if...else构造。

来自MDN:

  

条件(三元)运算符是唯一需要三个操作数的JavaScript运算符。此运算符经常用作if语句的快捷方式。

[source]

两个代码示例都会以相同的方式工作,即如果createdDate未定义,则三元语句的第二个表达式将运行(:之后的行)就像你的else块一样if...else构造将运行。

标题问题似乎有点无关,因为如果你想保存对某事的引用,你只需要使用=。在这种情况下,您似乎没有这样做。

关于你的后续问题,很多人使用三元语句进行适合一行或几行的小型检查和任务(我个人不喜欢,因为我更喜欢if...else的可读性)但是,任何即使是中等复杂的东西都会很快使您的代码难以阅读和理解。但是,从技术上讲,三元语句可以取代if...else块。

答案 4 :(得分:0)

关于第二个问题:

假设您不需要将结果保存在变量中,您可以这样做:

 promises.push(wf.createdDate?  
            self.wordFormUpdateSubmit(wf, key) :
            self.wordFormAddSubmit(wf, key);
 );

甚至可行:

 promises.push( 
      (wf.createdDate? self.wordFormUpdateSubmit:self.wordFormAddSubmit)(wf, key)           
     );