I know you should avoid it, thus although annoying I always protect myself against it.
But what exactly causes extensions to a prototype to show up when using "for in"? Sometimes it is (or seems to be) safe to use "for in" and other times it isn't.
i.e.:
I'm talking about for example:
Array.prototype.last = function(){ return this[this.length-1]; }
Showing up as:
for(var k in someArray){
console.log("%o %o", k, someArray[k]); // eventually outputs "last 'function(){ return this[this.length-1]; }'
}