If statement ElseIf vs ElseIf

If statement ElseIf vs ElseIf,if-statement,vbscript,syntax,semantics,If Statement,Vbscript,Syntax,Semantics,多年来,我一直在使用Else If在VBScript中编码 If a = b Then ... Else If a = c Then ... End If 它似乎按要求工作。我在网上也看到很多网站使用了Else If,除了MSDN使用ElseIf ElseIf与Else If之间是否存在差异 一小条 这是我之前编写的一个,它在经典ASP中运行良好: If IsDate(wD) Then wS = wD Else If wD&"" <> Format

多年来,我一直在使用
Else If
在VBScript中编码

If a = b Then
    ...
Else If a = c Then
    ...
End If
它似乎按要求工作。我在网上也看到很多网站使用了
Else If
,除了MSDN使用
ElseIf

ElseIf
Else If
之间是否存在差异

一小条 这是我之前编写的一个,它在经典ASP中运行良好:

If IsDate(wD) Then
    wS = wD
Else If wD&"" <> FormatDisplayDate(wS) Then
    wS = WeekStart(Date())
    wD = FormatDisplayDate(wS)
End If
这些都不是通过编译器运行的,但是都是经过解释的


忽略那些垃圾-我在IDE中搞砸了搜索和替换。

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

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

vs单向条件

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

并且,正如所指出的,前者应该在不关闭嵌套的
End If

Else If
的情况下引发错误,如果
将嵌套的
If
放入第一个
If
语句的
Else
分支中,而
ElseIf
是初始
If
语句的一部分

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

vs单向条件

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

并且,正如所指出的,如果示例代码没有编译并产生编译错误,则前者应该在没有结束嵌套的
结束的情况下引发错误

Microsoft VBScript编译错误:应为“结束”

如我所料

我从来都不知道别人会以其他方式工作。我能想到的唯一一件事就是你把它写成一个嵌套的
If
语句

如果a=b,则
...
否则,如果a=c,则
...
如果结束
如果结束
看起来很难看,但和写作一样

如果a=b,则
...
其他的
如果a=c,则
...
如果结束
如果结束
这种方法的问题是,在嵌套的
If
语句中,最终会出现一个未处理的条件。例如,如果
a=d
会发生什么情况

如果
捕获了
ElseIf
语句不需要的额外条件,则需要确保嵌套的

如果a=b,则
...
其他的
如果a=c,则
...
其他的
...
如果结束
如果结束
ElseIf

如果a=b,则
...
如果a=c,那么
...
其他的
...
如果结束


(VBScript编译器背后的一位程序员)在评论的海洋中…非常值得一读。我当然学到了一些东西。

示例代码没有编译并产生编译错误

Microsoft VBScript编译错误:应为“结束”

如我所料

我从来都不知道别人会以其他方式工作。我能想到的唯一一件事就是你把它写成一个嵌套的
If
语句

如果a=b,则
...
否则,如果a=c,则
...
如果结束
如果结束
看起来很难看,但和写作一样

如果a=b,则
...
其他的
如果a=c,则
...
如果结束
如果结束
这种方法的问题是,在嵌套的
If
语句中,最终会出现一个未处理的条件。例如,如果
a=d
会发生什么情况

如果
捕获了
ElseIf
语句不需要的额外条件,则需要确保嵌套的

如果a=b,则
...
其他的
如果a=c,则
...
其他的
...
如果结束
如果结束
ElseIf

如果a=b,则
...
如果a=c,那么
...
其他的
...
如果结束


(VBScript编译器背后的一位程序员)在评论的海洋中…非常值得一读。我确实学到了一些东西。

您发布的代码无法编译。所以我想知道你这么多年来做了什么。我也被这个问题弄糊涂了;你能提供一个实际编译和运行的代码片段来演示你的问题吗?在此之前,有一个有趣的转移:预测这一行
If
语句是否应该编译,假设存在
sub
s
Foo
Bar
以及布尔表达式
X
如果X,那么Foo Else Bar
。有没有VBScript专家愿意试一试?@Lankymart:对!单行
If
解析器中有一个我从未修复过的错误。它试图将
Foo-Else
解析为语句,但失败了,而没有检测到
Else
在单个标记
Foo
之后结束语句。除了没有被认为是一个高度优先的问题之外,没有什么好的理由可以解释为什么它从未被修复。@EricLippert:哇!很高兴得到这个人的支持o) 您发布的代码未编译。所以我想知道你这么多年来做了什么。我也被这个问题弄糊涂了;你能提供一个实际编译和运行的代码片段来演示你的问题吗?在此之前,有一个有趣的转移:预测这一行
If
语句是否应该编译,假设存在
sub
s
Foo
Bar
以及布尔表达式
X
如果X,那么Foo Else Bar
。有没有VBScript专家愿意试一试?@Lankymart:对!单行
If
解析器中有一个我从未修复过的错误。它试图将
Foo-Else
解析为语句,但失败了,而没有检测到
Else
在单个标记
Foo
之后结束语句。除了没有被认为是一个高度优先的问题之外,没有什么好的理由可以解释为什么它从未被修复。@EricLippert:哇!很高兴得到这个人的支持o)
If condition Then
  ...
ElseIf condition Then
  ...
Else
  ...
End If