VBScriptには辞書型のオブジェクト Scripting.Dictionary
があります。
が、このオブジェクトにはちょっとした罠が潜んでいます。
それは「存在しないキーに対して値を取得しようとするとキーを作成してしまう」というものです。
項目を変更するときに引数 key で指定したキーが見つからない場合、newitem で指定した項目と関連付けられた、引数 key で指定した新しいキーが作成されます。また、既存の項目を取得するときに引数 key で指定したキーが見つからない場合は、空の項目と関連付けられた、引数 key で指定した新しいキーが作成されます。
以下、実際に試したコードです。
Option Explicit
Dim objDict, sKey
Set objDict = CreateObject("Scripting.Dictionary")
' "hoge" キーを追加
objDict.Add "hoge", "hogehoge"
' この時点では "hoge" キーのみ表示される
For Each sKey In objDict.Keys
WScript.Echo skey & " => " & objDict(sKey)
Next
' 存在しないキーにアクセスすると Empty が返る
If IsEmpty(objDict("fuga")) Then
WScript.Echo "objDict(""fuga"") is Empty" ' こちらが表示される
Else
WScript.Echo "objDict(""fuga"") is not Empty"
End If
' "hoge", "fuga" の両方が表示される
For Each sKey In objDict.Keys
WScript.Echo skey & " => " & objDict(sKey)
Next
対策としては objDict.Exists("fuga")
でキーを問い合わせることです。