VBScript中的整数和字符串比较冲突

Shu*_*ndu 3 vbscript hp-uft

尝试在HP-UFT中运行时,下面的VBScript代码使我感到困惑,因为第一个语句打印True而不是False(这似乎不合逻辑),而第二个语句打印False(这看似合乎逻辑)

码:

print 40 = "40"

a = 40
b = "40"
print a = b
Run Code Online (Sandbox Code Playgroud)

输出:

True
False
Run Code Online (Sandbox Code Playgroud)

Lan*_*art 6

这是完全合乎逻辑的(咳嗽),VBScript中只有一种数据类型Variant.但是,VBScript可以处理Variant数据类型的许多不同子类型.

当你比较

40 = "40"
Run Code Online (Sandbox Code Playgroud)

VBScript隐式将String子类型转换为子类型,Integer并比较结果与执行以下显式转换相同;

40 = CInt("40")
Run Code Online (Sandbox Code Playgroud)

如果你已经有你的变种定义的VBScript但仅尝试隐式转换他们,如果执行上下文适合(当它适合有点朦胧而在某些情况下,直线上升的错误-见参考文献).

为避免这种情况,请在必要时使用显式转换.

a = CInt(b)
Run Code Online (Sandbox Code Playgroud)

有用的链接

  • @Shubham Kundu - 只是添加@Lankysmart所说的内容 - 您还可以使用`VarType`函数来检查变量的类型,以防万一你想确定.QTP的帮助非常适合VarType.阅读一次. (2认同)
  • @PankajJaju还有`TypeName()`,它给你一个更友好的输出. (2认同)
  • @Lankysmart - Sidenote ---感谢Eric的精彩文章. (2认同)