Code
<div></div>
<div></div>
<script type="text/javascript">
function _ (o){
var s = [],i;
for(i in o)
s.push(i+' ('+typeof i+'): '+o[i]+';');
return s.join('\n');
}
z = {}; // создаем хэш
z[document.getElementsByTagName('div')[0]] = 5; // включаем в хэш первый див
z[document.getElementsByTagName('div')[1]] = 10; // и второй див
alert(document.getElementsByTagName('div')[1]==document.getElementsByTagName('div')[0]) // первый див НЕ равен второму. Всё верно.
// по идее и значения хэша не будут равны друг другу, так как 5 не равно 10 и дивы не равны - это мы уже проверили. Но:
alert(z[document.getElementsByTagName('div')[1]]==z[document.getElementsByTagName('div')[0]]) // вернет true
//ПОЧЕМУ!!!????
// Потому что
alert(_(z))
</script>
Индексами объекта / массива могут быть только числа и строки.