首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VBScript中为经典ASP执行一行If语句?

如何在VBScript中为经典ASP执行一行If语句?
EN

Stack Overflow用户
提问于 2013-12-03 13:55:22
回答 5查看 50.3K关注 0票数 39

“单行if语句”存在于C#和VB.NET中,与许多其他编程语言和脚本语言一样,格式如下

代码语言:javascript
运行
复制
lunchLocation = (dayOfTheWeek == "Tuesday") ? "Fuddruckers" : "Food Court";

有没有人知道在VBScript中是否存在,以及extact语法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-03 14:11:28

条件三元操作符并不是现成的,但是在VBScript中很容易创建自己的版本:

代码语言:javascript
运行
复制
Function IIf(bClause, sTrue, sFalse)
    If CBool(bClause) Then
        IIf = sTrue
    Else 
        IIf = sFalse
    End If
End Function

然后,您可以按照您的示例使用此方法:

代码语言:javascript
运行
复制
lunchLocation = IIf(dayOfTheWeek = "Tuesday", "Fuddruckers", "Food Court")

与使用单行If/Then/Else相比,它的优点是可以与其他字符串直接连接。在一行上使用If/Then/Else必须是该行上的唯一语句。

对此没有错误检查,该函数需要一个格式良好的表达式,该表达式可以计算为作为子句传入的布尔值。关于更复杂和更全面的答案,见下文。不过,希望这个简单的回答巧妙地展示了答案背后的逻辑。

还值得注意的是,与真正的三值运算符不同,不管sTrue bClause.的值是多少,都将计算和参数。如果您像在问题中一样将它与字符串一起使用,这是很好的,但是如果将函数作为第二个和第三个参数传递,则要非常小心!

票数 59
EN

Stack Overflow用户

发布于 2013-12-03 14:23:11

VBScript没有任何三值运算符。

在一行中不使用用户定义函数的封闭解决方案,纯VBScript:

代码语言:javascript
运行
复制
If dayOfTheWeek = "Tuesday" Then lunchLocation = "Fuddruckers" Else lunchLocation = "Food Court"

顺便说一句,如果三元操作符对你很重要,你可以在经典ASP中使用JScript。

票数 21
EN

Stack Overflow用户

发布于 2013-12-03 15:26:48

编辑了 2017/01/28以适应某些非布尔条件参数

注意:如果您只需要根据布尔值选择一个字符串,请使用Polinominal的answer中的代码。它比这个答案中的代码更简单、更快。

对于一个简单但更“灵活”的解决方案,这段代码(这个答案中的原始代码)应该处理通常的基本场景。

代码语言:javascript
运行
复制
Function IIf( Expression, TruePart, FalsePart)
Dim bExpression
    bExpression = False 
    On Error Resume Next
    bExpression = CBool( Expression )
    On Error Goto 0
    If bExpression Then 
        If IsObject(TruePart) Then 
            Set IIf = TruePart
        Else 
            IIf = TruePart
        End If 
    Else
        If IsObject(FalsePart) Then 
            Set IIf = FalsePart
        Else 
            IIf = FalsePart
        End If 
    End If 
End Function 

如果使用Cbool函数尝试将传递的Expression参数转换为布尔值,并接受TrueValueFalseValue参数中的任何类型的值。对于一般的使用,这是快速、安全和完全符合记录的VBScript行为。

这段代码唯一的“问题”是,对于某些数据类型,CBool的行为并不完全“直观”,至少对于那些在vbscript和javascript之间不断变化的人来说是这样。虽然数值是一致的( 0False,任何其他数值都是True),但非数字类型会生成运行时错误(在以前作为false处理的代码中),除非它是一个具有数字内容的字符串,或者可以在英文或OS语言环境中解释为真或假值。

如果需要 it,则与? javascript三元运算符“等效”的VBScript版本为

代码语言:javascript
运行
复制
Function IIf( Expression, TruePart, FalsePart )
Dim vType, bExpression 

    vType = VarType( Expression )
    Select Case vType
        Case vbBoolean                : bExpression = Expression 
        Case vbString                 : bExpression = Len( Expression ) > 0
        Case vbEmpty, vbNull, vbError : bExpression = False
        Case vbObject                 : bExpression = Not (Expression Is Nothing)
        Case vbDate, vbDataObject     : bExpression = True
        Case Else
            If vType > 8192 Then 
                bExpression = True
            Else
                bExpression = False 
                On Error Resume Next
                bExpression = CBool( Expression )
                On Error Goto 0
            End If 
    End Select 

    If bExpression Then 
        If IsObject( TruePart ) Then 
            Set IIf = TruePart
        Else 
            IIf = TruePart
        End If 
    Else
        If IsObject( FalsePart ) Then 
            Set IIf = FalsePart
        Else 
            IIf = FalsePart
        End If 
    End If 
End Function 

但是,与所使用的版本无关,要小心,是在调用一个函数,而不是使用三元操作符。放入TruePart of FalsePart中的任何代码或函数调用都将独立于条件的值执行。所以这个代码

代码语言:javascript
运行
复制
value = IIf( 2 > 3 , DoSomething(), DontDoSomething() )

将执行这两项功能。只有正确的值才会返回给value变量。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20353072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档