I keep finding the frame problem overrated, specially in this case where
the case you are passing DOM nodes between frames is ... well, extremely
edge?

If NodeList.prototype is instanceof Array then this check is all you need
before Array.isArray(nl) but generally speaking I agree is never that easy
to understand what's utterable "as if it is" an Array, i.e. live
collections as well such getElementsByTagName()

obj instanceof Array ||
Array.isArray(obj) ||
(
  typeof obj.length === "number" &&
  ~~obj.length === obj.length &&
  (typeof obj != "function" || 0 in obj)
) // latter for functions used as ArrayLike objects

so that Arguments, NodeList, LiveCollections, and Arrays, should all pass
this test and we can iterate with common Array.prototype[extras] method

Do you see problems with above checks ? Anything I am not considering ?

br

On Sun, Apr 8, 2012 at 2:49 AM, Rick Waldron <[email protected]> wrote:

> On Sat, Apr 7, 2012 at 8:41 PM, Domenic Denicola <
> [email protected]> wrote:
>
>>  On Apr 7, 2012, at 20:37, "Rick Waldron" <[email protected]> wrote:
>>
>>   On Sat, Apr 7, 2012 at 8:31 PM, Erik Arvidsson <
>> [email protected]> wrote:
>>
>>> On Sat, Apr 7, 2012 at 17:28, Rick Waldron <[email protected]>
>>> wrote:
>>> > As in, its [[Class]] is "Array" and Array.isArray( nodes ) would
>>> evaluate to
>>> > true?
>>>
>>>  No, it means that Object.getPrototypeOf(NodeList.prototype) ===
>>> Array.prototype.
>>>
>>
>>  Yes, this part was clear in the links you sent. The question I had was
>> about two things that were not addressed in the links (that I could see,
>> please correct if I missed them)
>>
>>  There will be much confusion on the web if Array.isArray(nodes) returns
>> false, while nodes.push( node ), nodes.slice( 0, 2 ) "just work",
>> especially during periods of transition from DOMx to DOM4.
>>
>>
>>  Rick
>>
>>
>>
>>> Fortunately all the Array.prototype methods are generic so it all just
>>> works.
>>>
>>> --
>>> erik
>>>
>>
>>
>> I think the benefits are so great I'm happy to deal with any confusion.
>>
>
>>  Although, it sounds like I'll be wanting to go back to `instanceof
>> Array`, which is kind of funny.
>>
>
> `instanceof Array` is unreliable across contexts (ie. frames) whereas
> Object.prototype.toString.call( thing ) === "[object Array]" is
> irrefutable...  That said, I'm sure there is also plenty of code that that
> still expects Object.prototype.toString.call( nodelist ) === "[object
> NodeList]" (as unadvisable as that might be)
>
>
> Rick
>
>
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to