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

就同时完成了数据有效性验证和比较。

这个很小的细节,在实际编程中用到的地方非常多,每个地方都多两个步骤,那的确在性能上就是比较低大的浪费了。

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小李刀刀(包含链接)。如您有任何疑问或者授权方面的协商,请给我发送邮件

  • Twitter
  • Facebook
  • Google Buzz
  • Blogger Post
  • Digg
  • MSDN
  • MySpace
  • Ping
  • TechNet
  • WordPress
  • Share/Bookmark
2005年11月23日 | 归档于 所谓技术
标签: ,
  1. jack
    2009年1月9日 02:06 | #1

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

  2. 感觉
    2006年4月7日 03:07 | #2

    学习~

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>