Le 26/12/2013 10:58, David Bruant a écrit :
Le 26/12/2013 05:00, Rick Waldron a écrit :

On Wed, Dec 25, 2013 at 7:33 PM, David Bruant

    For the rationale, the wiki states [1]:
    "There are many array-like objects in JS (arguments objects, DOM
    NodeLists, arrays from separate windows, typed arrays) and no
    simple way to convert one of these to an instance of Array in the
    current window; this is the rationale behind a simple conversion
    function (Array.from)."

    I think that if all of these objects had a good default
    @@iterable, there wouldn't be a need for the array-like part of
    Array.from.
    The "good default" most likely being based on .length, etc.


The array-like part is for all of those objects that _won't_ have an @@iterator, for one reason or another
I must have missed these reasons. No @@iterator also means these objects cannot be iterated with via for-of loops by default and I can't think of a good reason for that for any of the listed (arguments, NodeList, arrays from different windows, typed arrays). Do you have a link to previous discussions on this topic or a summary if that can be explained quickly?
Found the relevant part of the notes [1]:
"BE: Let's not remain slaves to legacy, Array.from, for-of and spread use only iterable.

RW: What about pre ES6 environment?

BE: Can fall back to array-like if needs."

I guess this is where I differ as I don't see a need. In ES5 environments, the default @@iterator can be embedded in Array.from, leading to something like (worst case for explanatory purposes):

````js
Array.from = function(x){
    if(/*x is a NodeList*/){
// polyfill default NodeList[@@iterator] behavior to create the array to return
    }
    if(/*x is an Arguments*/){
// polyfill default Arguments[@@iterator] behavior to create the array to return
    }
    // ...
}
````

Most likely all of these @@iterator polyfills are the same array-like traversals, so there shouldn't be a need to separate each case, they most likely all use the same logic.

Rick Waldron:
The array-like part is for all of those objects that _won't_ have an @@iterator, for one reason or another
The Conclusion/Resolution section of [1] suggests: "Add iterator protocol to arguments object (should exist on all things." I went quickly through all the meeting notes I could find and didn't find something about some objects not having an @@iterator.

David

[1] https://github.com/rwaldron/tc39-notes/blob/master/es6/2012-11/nov-29.md#revisit-nov-27-resolution-on-iterables-in-spread
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to