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

VBScript中的整数和字符串比较冲突,vbscript,hp-uft,Vbscript,Hp Uft,试图在HP-UFT中运行时,下面的VBScript代码让我感到困惑,因为第一条语句打印的是True,而不是False(似乎不符合逻辑),而第二条语句打印的是False(似乎符合逻辑) 代码: 输出: True False 这是完全合乎逻辑的(cough),VBScript中只有一种数据类型,即Variant。然而,VBScript可以处理变量数据类型的许多不同子类型 当你比较 40 = "40" VBScript将字符串子类型隐式转换为整数子类型,并比较与执行以下显式转换

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

代码:

输出:

True
False
这是完全合乎逻辑的(cough),VBScript中只有一种数据类型,即
Variant
。然而,VBScript可以处理
变量
数据类型的许多不同子类型

当你比较

40 = "40"
VBScript将
字符串
子类型隐式转换为
整数
子类型,并比较与执行以下显式转换相同的结果

40 = CInt("40")
如果您已经定义了变量,那么VBScript只会在执行上下文合适的情况下尝试隐式转换它们(当合适的时候有点模糊,并且在某些情况下是一个直接的bug-请参阅)

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

a = CInt(b)

有用的链接

@Shubham Kundu-只是为了补充@Lankysmart所说的内容-您还可以使用
VarType
函数检查变量的类型,以防您需要确定。QTP的帮助对VarType非常有用。读一次。@PankajJaju还有一个
TypeName()
,它可以提供更友好的输出。是的。它返回一个我个人不喜欢用于条件检查的字符串。@Lankysmart-Sidenote---谢谢Eric的优秀文章。VBScript不是很神奇吗?相同的事物不相等;比较变量不同于比较变量中的值。想想我们要做的所有工作,使这些完全疯狂的语义!
a = CInt(b)