Nous avons actuellement un problème dû à la conversion implicite dans une instruction IF dans VBScript (ASP classique) qui n'effectue pas la conversion implicite de la même manière lorsqu'il s'agit d'une variable ou d'un littéral. Quelqu'un peut-il m'expliquer ce comportement, pourquoi VBScript agit-il de cette façon?Conversion implicite VBScript dans une instruction IF différente de la variable en littéraux?
Voici un échantillon de ce que je veux dire:
Const c_test = 3
Dim iId : iId = 3
Dim iTestStr : iTestStr = "3"
If iId = iTestStr Then
Response.Write("Long variable = String variable : Equal")
Else
Response.Write("Long variable = String variable : Not Equal")
End If
Response.Write("<br/>")
If c_test = iTestStr Then
Response.Write("Long constant = String variable : Equal")
Else
Response.Write("Long constant = String variable : Not Equal")
End If
Response.Write("<br/>")
If c_test = iId Then
Response.Write("Long constant = Long variable : Equal")
Else
Response.Write("Long constant = Long variable : Not Equal")
End If
Response.Write("<br/>")
If iId = "3" Then
Response.Write("Long variable = String literal : Equal")
Else
Response.Write("Long variable = String literal : Not Equal")
End If
Response.Write("<br/>")
If c_test = "3" Then
Response.Write("Long constant = String literal : Equal")
Else
Response.Write("Long constant = String literal : Not Equal")
End If
qui Ouputs:
variable à long = Variable chaîne: Non égal
longue constante = Variable chaîne: Non égal
Constante longue = Variable longue: Égal
variable à long = chaîne littérale: l'égalité
longue constante = chaîne littérale: l'égalité
Ce qui est assez déroutant o_O
J'ai testé les types de variables et de constantes avec la fonction VBScript "VarType", et aucun d'entre eux est Variant, il s'avère qu'ils sont vbInteger (pour le iId et c_test) et vbString pour iTestStr. Par ailleurs, VBScript n'autorise pas la déclaration de type de variable. – MaxiWheat
@Maxi: J'avais oublié ça. Mais les variables sont * still * de type 'Variant', et' VarType' en fait * extrait * la balise de type d'un 'Variant', ce qui explique pourquoi vous obtenez un autre résultat. 'VarType' peut aussi renvoyer' vbVariant', mais c'est seulement le cas pour * array * de 'Variant's. –
Je vais accepter votre solution qui semble logique, même si je n'ai aucun moyen de confirmer que c'est tout à fait raison ;-) – MaxiWheat