ASP中的数字和字符比较

昨晚和老迷聊天聊到很晚,说到一个把字符串转换为数字进行比较的问题。老迷说他喜欢保持字符串本身的类型,进行字符串的匹配比较,而不喜欢把字符串强制转换为数字进行比较。 一开始我不太明白这到底有什么区别,比如

a = "1"
If a = 1 Then
    'Something
End If

a = "1"
If a = "1" Then
     'Something
End If

在VB中,变量的数据类型默认是 Variant,在必要的时候自动转换,例如上例第一种,由于表达式右边是数字,因此系统会自动将字符串变量a转换为数字类型,然后进行数字的比较。而第二种则没有转换类型这个过程。 这个从代码上看没有任何区别的比较过程,在执行时却差着一个步骤。这就是老迷关于他为什么更愿意保持字符串变量的字符串类型来进行比较的原因。

最简单的运用就是用户登录时,比如有个是否保存 cookies 的选项。通常是用下拉选择或者单选按钮,表单数据经过ASP程序读取之后,Request.Form("cookies") 的值默认情况下是字符串类型的。我们往往是把它当成数字来用,有时候我们还习惯用 a = Cint(Request.Form("cookies")) 的方式在读取时进行转换,也或者不做转换,直接用 If a = 1 来判断。 实际上不管用哪种方法,都离不开一个转换的过程,而且为了避免 Cint 函数出错,我们往往还需要在前面增加一个 IsNumeric 的验证,这样一来,多出来的就不只是一个步骤了。 而如果我们直接把 Request.Form("cookies") 作为字符串考虑,我们只需要一行代码即可:

If Request.Form("cookies") <> "" and a = "1" Then

就同时完成了数据有效性验证和比较。 这个很小的细节,在实际编程中用到的地方非常多,每个地方都多两个步骤,那的确在性能上就是比较低大的浪费了。

               

ASP中的数字和字符比较》上有3条评论

  1. jack

    获益良多,谢谢!
    不过,有一点点疑问If Request.Form(”cookies”) “” and a = “1″ Then
    中Request.Form(”cookies”) “” and 是否可以不要?

  2. jack

    获益良多,谢谢!
    不过,有一点点疑问If Request.Form(”cookies”) “” and a = “1″ Then
    中Request.Form(”cookies”) “” and 是否可以不要?

评论已关闭。