Christoph Zwerschke wrote: > Duncan Booth schrieb: >> In Javascript Object properties (often used as an associative array) >> are defined as unordered although as IE seems to always store them in >> the order of original insertion it wouldn't surprise me if there are >> a lot of websites depending on that behaviour. > > You're right with both. The ECMA language definition says object > properties are an unordered collection, but MSIE and probably other > browsers keep the order in which they were created. Of course one > should not rely on that. > Yes, the real fun bit is arrays. If you create an array using the 'new Array' or [ ... ] then a for..in loop might well trick you into thinking it is going to go through the elements in order, but if you assign to elements directly it breaks down:
a = ['a', 'b', 'c']; a[4] = 'e'; a[3] = 'd'; for (var k in a) { alert(a[k]+'='+a[k]); } On IE this will go through elements in the order 0, 1, 2, 4, 3. Also, it is original order of insertion which matters, not the 'last in/last out' you might have expected. In other words it looks rather as though IE simply sets deleted properties to undefined (and skips them on iteration), it never really deletes a property, so anyone who tries to use a Javascript object as an associative array with lots of rapidly changing keys could be in for a nasty shock. -- http://mail.python.org/mailman/listinfo/python-list