先日のエントリでJavascriptのfor in文について for in文は処理済みのプロパティ名のみを覚えていてプロパティの数はチェックしない。未処理のプロパティが存在するか否かはループ内の処理が終わるたびにその時点でのプロパティと処理済のプロパティを比較して判断される。 と、結論付けていたのですがこれとは異なる挙動になる場合をみつけたので続編です。よろしければ先のエントリに目を通してからお読みいただければと思います。 それはどういう場合かというと 「最初に存在していたプロパティを未処理の段階で削除し、ループの次の周でもう一度同じ名前のプロパティを追加した場合」 です。 var testHash = { a: "one", aa: "two", aaa: "three", aaaa: "four", aaaaa: "five", aaaaaa: "six", aaaaaaa: "sev