i would disagree if you say "hey here is an array, can you loop over it for me?" then it is doing what you ask it to do...its not the functions fault that you hand it dirty data. its up to you as a programmer to deal with the data correctly.
_____ From: Roman Land [mailto:[email protected]] Sent: Tuesday, 15 December 2009 11:53 AM To: [email protected] Subject: Re: [Moo] Found a very annoying bug.. Thats true, it does look better. About who's fault it is, I would expect a "foreach" loop not to try to itterate over an non existant element (at position 0 or whatever), the fact I am trying to use this nonexistent element later is not so evil IMO :) for ( var thought in thoughts) { if (thought) alert("I think, therefor I exist!") } On Tue, Dec 15, 2009 at 2:32 AM, Aaron Newton <[email protected]> wrote: this is by far the better option. it's not IE's fault that you are trying to reference something that doesn't exist. This isn't a bug in IE or MooTools. On Mon, Dec 14, 2009 at 7:09 PM, Barry van Oudtshoorn <[email protected]> wrote: What about doing something like $each(arr, function(item) { if (item && item.foo) item.foo(); }) It's more robust and will mean that you can start indexing your arrays from whatever you want. On 15/12/09 08:04, Roman Land wrote: Indeed this code would cause an issue for me, since the issue is not due to referencing of the nonexistent item, rather inside the loop I do something like: $each(arr, function(item, i) { item.foo(); // this will throw an error on undefiled object and stop JS }) My workaround by the way is to check weather i == 0 (this is a special array I use where I normally start at position 1). FF's implementation does actually jump over position 0 - starting at 1, that would be logical interpretation of "foreach" vs "for (i =0 ; i < smt.length ; i++)" - where I tell him to begin at position 0 explicitly. Cheers -- Roman On Tue, Dec 15, 2009 at 1:18 AM, Aaron Newton <[email protected]> wrote: Here is the code for forEach, implemented into browsers that do not implement it themselves: forEach: function(fn, bind){ for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this); } as you can see, it loops over each item and calls your function, passing the array's value at i. This is undefined for your zero value. I don't know where IE would freak out on this (though it doesn't surprise me that it might). The code above references yourArray[index] that shouldn't throw an error... Aaron On Mon, Dec 14, 2009 at 12:31 PM, Roman Land <[email protected]> wrote: Lolz on the kindly:) Paul, this site is meant to work on all browsers, I currently have a work around, this behavior is undesired despite it's roots being in ie implementation of foreach. Cheers, Roman On 14/12/2009, at 18:28, Paul Saukas <[email protected]> wrote: > Roman , > > I believe that is an IE issue . I have no problem running your > example on IE8 . It just kindly spits undefined out in place of the > missing element 0 if i have it display the items, If i do the keys > then IE shows 01234 and ff 1234. What version of IE are you using ? -- --- "Make everything as simple as possible, but not simpler." - Albert Einstein -- Not sent from my iPhone. -- --- "Make everything as simple as possible, but not simpler." - Albert Einstein
