1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

ASP(VBScript)逻辑判断中不支持捷径运算

本帖由 不学无术2005-10-14 发布。版面名称:后端开发

  1. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    那就是在 VBScript 中,不支持 捷径运算(Short-Circuit Evaluation)。

    捷径运算的特点是:

     
  2. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    主要是遇到类似的语句的时候感觉到 VBScript 不支持捷径运算的(因为脚本是顺序执行的,逻辑上不需要去执行的代码就不会执行了):

    代码:
    If UBound(arrTitles) >= i And arrTitles(i) = strTitle_0 Then
    出现的错误是 i 越界。

    本来是想通过前面一部分限定 i 必须在允许的范围内,只要前面部分不成立,按照捷径运算的规则,后面部分是不需要判断的,从而绕开 i 越界这个错误的产生。

    但是在 JavaScript 中,这个却不会出现错误。

    代码:
    <script language="javascript" type="text/javascript">
    <!--
    var a = new Array(2);
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    
    if (1 == 2 && a[5] == 5) {
        alert("Yes");
    }
    else {
        alert("No");
    }
    -->
    </script>
     
  3. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    相互对比的代码:

    HTML:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>捷径运算 测试</title>
    <script language="javascript" type="text/javascript">
    <!--
    var a = new Array(2);
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    
    if (1 == 2 && a[5] == 5) {
        alert("Yes");
    }
    else {
        alert("No");
    }
    -->
    </script>
    </head>
    
    <body>
    <%
    Dim a(2)
    a(0) = 0
    a(1) = 1
    a(2) = 2
    
    If 1 = 2 And a(5) = 5 Then
        Response.Write("Yes")
    Else
        Response.Write("No")
    End If
    %>
    </body>
    </html>
    
     
  4. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    在上面的例子中,如果去掉 JavaScript 代码中的 1 == 2 ,依然会的到 No 这个结果,不过会得到“引用未定义参数a[5]”的警告,注意是警告,而不是错误。通常出现警告,程序还是会执行,只是结果可能不是意料之中的。

    如果不去掉 1 == 2,就不会有任何警告或者错误了。