有人可以告诉我这是否是有效的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(){}构造的需要吗?
答案 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)
);