PRB: Semantic Compatibility Problem with Hardtypes in VBScriptID: Q190272
|
VBScript has a semantic compatibility difference with Visual Basic for Applications (VBA) with regard to hardtype comparisons. Basically, VBA's comparison semantics are such that non-variant values are "hardtypes," meaning that they cannot change types. During comparison, variants must be coerced to their types. The problem is that in VBScript everything is a variant, and VBScript doesn't remember that it's a "hardtype" value.
This behavior is by design.
Sub main()
Dim v1
Dim v2
v1 = "100" ' variant string
v2 = 1000 ' variant integer
msgbox (v1 > v2) ' string variant always > numeric variant
msgbox (v1 > CLng(v2)) ' Clng(v2) is hardtype so it is converted
' to string variant
End Sub
If you run this test in VBA, the first comparison (v1 > v2) is True because
variant strings are always greater than variant numbers. In the second
comparison (v1 > CLng(v2)), the CLng() function returns a hardtype long
value; in this case, VBA converts the string variant to the hardtype (long)
and performs the comparison, which returns False. Both comparisons return True in VBScript.
Additional query words:
Keywords : kbScript kbVBScript kbIE500
Version : WINDOWS:3.0,3.01,3.02,4.0,5.0; winnt:3.0
Platform : WINDOWS winnt
Issue type : kbprb
Last Reviewed: July 13, 1999