« Flash CS3 Professional Flash Player アップデート(9.0.2) | メイン | クライアントワーク »

for in 文の謎(as3)

var d:Dictionary = new Dictionary();
d["A"] = true;
d["B"] = true;
d["C"] = true;
d["D"] = true;
d["E"] = true;
d["F"] = true;
for(var n:String in d){
	//d[n] = false;
	trace(n)
}
trace(d["D"]) // ?
結果:BDFACE
D = true
コメントを外して再度コンパイル
結果:BAEBFC
D = true
Bふたつありますか。Dさんは、どこへ行きましたか。 ちなみにDictionaryじゃなくても、ArrayでもObjectでも同じ。
で、色々試しました。 とりあえず、"B"を"b"と小文字にしました。
var d:Object= new Object();
d["A"] = true;
d["b"] = true;
d["C"] = true;
d["D"] = true;
d["E"] = true;
d["F"] = true;
for(var n:String in d){
	d[n] = false;
	trace(n)
}
trace(d["D"]) // ?
結果:bAEDFC
D = false
正しいじゃないか。
意味がわかりません。
さらに、
var d:Object = {"A":true,"B":true,"C":true,"D":true,"E":true,"F":true};
for(var n:String in d){
	d[n] = false;
	trace(n)
}
trace(d["D"]) // ?
結果:DEAFBC
D = false
正しいじゃないか。

なんなんだろうか。
それから、as2では当然この症状は出ません。


For in bug ?

トラックバック

このエントリーのトラックバックURL:
http://www.makoche.jp/blog/mt-tb.cgi/8

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)