VBScript 中的整数和字符串比较冲突
Integer and String comparison conflict in VBScript
在 HP-UFT 中尝试 运行 时,下面的 VBScript 代码让我感到困惑,因为第一条语句打印 True
而不是 False
(这似乎不合逻辑),而第二个打印 False
(这似乎合乎逻辑)
代码:
print 40 = "40"
a = 40
b = "40"
print a = b
输出:
True
False
完全符合逻辑(咳),VBScript 中只有一种数据类型,那就是Variant
。然而,VBScript 可以处理 Variant
数据类型的许多不同子类型。
比较时
40 = "40"
VBScript 正在将 String
子类型隐式转换为 Integer
子类型并比较与执行以下显式转换相同的结果;
40 = CInt("40")
如果您已经定义了变体,但是 VBScript 仅在执行上下文适合时才尝试隐式转换它们 (当它适合时有点模糊,在某些情况下是一个直接的错误 - 请参阅 Ref).
为避免这种情况,在必要时使用显式转换。
a = CInt(b)
有用的链接
- A: VBScript implicit conversion in IF statement different from variable to literals?
- MSDN Blog - Typing Hard Can Trip You Up (Eric Lippert)
在 HP-UFT 中尝试 运行 时,下面的 VBScript 代码让我感到困惑,因为第一条语句打印 True
而不是 False
(这似乎不合逻辑),而第二个打印 False
(这似乎合乎逻辑)
代码:
print 40 = "40"
a = 40
b = "40"
print a = b
输出:
True
False
完全符合逻辑(咳),VBScript 中只有一种数据类型,那就是Variant
。然而,VBScript 可以处理 Variant
数据类型的许多不同子类型。
比较时
40 = "40"
VBScript 正在将 String
子类型隐式转换为 Integer
子类型并比较与执行以下显式转换相同的结果;
40 = CInt("40")
如果您已经定义了变体,但是 VBScript 仅在执行上下文适合时才尝试隐式转换它们 (当它适合时有点模糊,在某些情况下是一个直接的错误 - 请参阅 Ref).
为避免这种情况,在必要时使用显式转换。
a = CInt(b)
有用的链接
- A: VBScript implicit conversion in IF statement different from variable to literals?
- MSDN Blog - Typing Hard Can Trip You Up (Eric Lippert)