DOM 要素の参照に問題があり、innerHTML の更新と関係があることを突き止めたと思います。
この例では、予想どおり、最初のアラートで 2 つの変数が同じ要素を参照しています。奇妙なのは、親要素 (本文) の innerHTML を更新した後、どちらにも触れていないにもかかわらず、2 つの変数が異なると思われることです。
<html>
<head>
<script type="text/javascript">
var load = function () {
var div1 = document.createElement('div');
div1.innerHTML = 'div1';
div1.id = 'div1';
document.body.appendChild(div1);
alert(div1 === document.getElementById('div1')); // true
document.body.innerHTML += '<div>div2</div>';
alert(div1 === document.getElementById('div1')); // false
};
</script>
</head>
<body onload="load();">
</body>
</html>
=== の代わりに == を使用しても、同じ結果が得られます。Firefox 3.5 と IE6 で同じ結果が得られます。2 番目のアラートが false と評価される原因は何ですか?