我的任务是重写一些客户端预订表单的代码,我希望有人可以解释以下语法。我知道它基本上就像一个if语句,但它的设置方式对我来说有点模糊,因为我对JavaScript有点新鲜:
testDate.setHours
(
ampm.value=="AM"?
(timestr[0]==12?0:timestr[0]=timestr[0]):
(timestr[0]==12?12:timestr[0]=timestr[0]+12)
);
我正在处理的这个问题背后的整个推理是为预订时间取值。它将字符串解析为一个数组,其中timestr [0]是小时值。根据AM / PM和用户输入的值,它将进行转换以将小时数设置为军事时间。我不确定这是否正常工作。
如果有人可以分析这段代码,请向我解释语法(?,:等)并告诉我这是否是转换小时的合适方式我会非常感激。
谢谢!
戴夫
编辑:
此外,这是一种相同的写作方式,更容易理解:
if(ampm.value=="AM")
{
if(timestr[0]==12)
{
timestr[0] = 0;
testDate.setHours(timestr[0]);
}
else
{
testDate.setHours(timestr[0]);
}
}
else
{
if(timestr[0]==12)
{
testDate.setHours(timestr[0]);
}
else
{
timestr[0] = timestr[0] + 12;
testDate.setHours(timestr[0]);
}
}
答案 0 :(得分:1)
这被称为三元运算符。
var answer = boolean ? response_1 : response 2;
与写作相同:
if (boolean) {
answer = response_1;
} else {
answer = response_2;
}
在您的情况下,timestr[0]==12?0:timestr[0]=timestr[0]
表示,如果timestr[0]
为12,则为0
,否则为timestr[0]=timestr[0]
。最后一点timestr[0]=timestr[0]
是一种奇怪的方式,只是说timestr[0]
。这可能是一个错误。
将ternarys包裹在更多的ternarys中经常受到不满,因为它令人困惑。
答案 1 :(得分:1)
它被称为ternary if而你真的不应该这样使用它 - 代码变得非常难以阅读。我会重构它以使用常规的if语句,来自你的开发人员会感谢你!
语法的工作原理如下:
var result = boolean_value ? true_result : false_result;