ElseIf vs Else If

时间:2016-07-18 14:22:45

标签: if-statement vbscript syntax semantics

多年来,我一直在使用Else If来编写VBScript代码......

If a = b Then
    ...
Else If a = c Then
    ...
End If

这似乎按要求工作。除了使用Else If的MSDN之外,我还在网上看到了许多使用ElseIf的网站。

ElseIfElse If之间是否存在差异?

<击> 这是我之前编写的一个通过Classic ASP工作正常的方法:

If IsDate(wD) Then
    wS = wD
Else If wD&"" <> FormatDisplayDate(wS) Then
    wS = WeekStart(Date())
    wD = FormatDisplayDate(wS)
End If

这是一段较旧的代码片段,由其他人编写......

if opip = "IP" then
    opip = "In Patient"
Else If opip = "OP" then
    opip = "Out Patient"
End If

这些都不是通过编译器运行的,但是,它们都被解释了。

<击>

忽略那个垃圾 - 我搞砸了一个搜索并在IDE中替换。

2 个答案:

答案 0 :(得分:3)

Else If将嵌套的If置于第一个Else语句的If分支中,而ElseIf是初始If语句的一部分

基本上它是两个双向条件(一个嵌套在另一个中)

If condition Then
  ...
Else
  If condition Then
    ...
  Else
    ...
  End If
End If

vs一个n-way条件

If condition Then
  ...
ElseIf condition Then
  ...
Else
  ...
End If

并且,正如https://jsfiddle.net/1fhbha4o/1/指出的那样,前者应该在没有关闭嵌套End If的情况下引发错误。

答案 1 :(得分:3)

该示例代码不编译并产生编译错误

  

Microsoft VBScript编译错误:预期&#39;结束&#39;

因为我期待(作为@ekkehard-horner point's out in the comments

我从未知道ElseIfdetailed in MSDN的方式工作。我唯一能想到的是你把它写成嵌套的If语句。

If a = b Then
    ...
Else If a = c Then
    ...
End If
End If

看起来很丑,但和写作一样

If a = b Then
    ...
Else
    If a = c Then
        ...
    End If
End If

这种方法的问题是你最终在嵌套的If语句中遇到了未处理的条件。例如a = d会发生什么?

您需要确保嵌套的If抓住了ElseIf声明不需要的额外条件。

If a = b Then
    ...
Else
    If a = c Then
        ...
    Else
        ...
    End If
End If

ElseIf方法将是;

If a = b Then
    ...
ElseIf a = c Then
    ...
Else
    ...
End If

Interesting musing@eric-lippert (VBScript编译器背后的程序员之一)在评论的海洋中......值得一读。我当然学到了一些东西。