理解JavaScript语法

时间:2014-11-07 13:52:28

标签: javascript syntax

我的任务是重写一些客户端预订表单的代码,我希望有人可以解释以下语法。我知道它基本上就像一个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]);
    }
}

2 个答案:

答案 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;