現在、変数またはリテラルを処理するときに同じ方法で暗黙的な変換を行わないVBScript(Classic ASP)のIFステートメントでの暗黙的な変換が原因で問題が発生しています。誰かがこの動作を私に説明できますか、なぜVBScriptがこのように動作するのですか?
これが私の言いたいことのサンプルです:
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
どの出力:
長い変数=文字列変数:等しくない
長い定数=文字列変数:等しくない
長い定数=長い変数:等しい
長い変数=文字列リテラル:等しい
長い定数=文字列リテラル:等しい
これはかなり紛らわしいo_Oです