Most browsers can do a for..in. At least for me there is no browser in existence that I care about that doesn't have that :)
> nobody has mucked around with Object.prototype
That's just what object.hasOwnProperty(key) is for. An annoying extra check but not a big deal.
> As for the ease of testing if something is an array, figuring out if something is an array is relatively easy but array like objects like arguments and domlist are where length checking comes from.
There is an incredibly limited list; I'd just check for those few items instead of relying on a property existing that other objects could use but I digress.