【发布时间】:2018-09-13 16:20:47
【问题描述】:
我正在尝试确定它是否在凌晨 12 点到凌晨 1 点之间。这是我的 if 语句:
If InStr(Time,"12") AND InStr(Time,"AM") Then
' Do something
Else
' Do something else
End If
问题是这个语句的计算结果为假,即使两个条件都为真。我知道这一点是因为我尝试过这样的嵌套 if
If InStr(Time,"12") Then
If InStr(Time,"AM") Then
' Do something
...
这行得通。这也有效
If InStr(Time,"12")<>0 AND InStr(Time,"AM")<>0 Then
' Do something
...
但如果它作为一个嵌套的 if 工作,为什么我不能在一个 if 语句中测试两个嵌套的 if 条件?
我用它们返回的值替换了 InStr 函数调用
If 1 AND 10 Then
' Do something
Else
' Do something else
End If
同样的事情发生了:if 语句被评估为假,而是执行了“做其他事情”命令。但是当我将第二个条件作为另一个 if 语句嵌套在第一个 if 语句中时,执行了“做某事”命令。
为什么会这样?有没有办法在没有 0 且没有嵌套的情况下做到这一点?
【问题讨论】:
-
If x AND y中的AND运算符对两个数值表达式中位置相同的位进行位比较。应用If x * y而不是 false 的值等于 0,反之亦然。 -
谢谢,这很奇怪,但我想这是有道理的。如果您将此作为答案,我会将其标记为答案
-
Instr不返回True或False。它返回搜索字符串第一次出现的位置,如果未找到,则返回0。也许这让你感到困惑? -
对,这就是我的意思,
Instr不返回布尔值,它返回一个整数。 -
问题在于 VBScript 对布尔 和 位操作使用相同的运算符,具体取决于操作数的数据类型。行为是documented。要强制进行布尔比较,您需要使用
InStr(...) > 0或CBool(InStr(...))(两者都计算为布尔结果)而不是仅使用InStr(...)(计算结果为数字结果)。
标签: if-statement vbscript multiple-conditions