Le 28/12/2013 20:24, Rick Waldron a écrit :
On Sat, Dec 28, 2013 at 11:37 AM, David Bruant <[email protected] <mailto:[email protected]>> wrote:

    I feel that all the cases that justified arraylikes in the past
    have much better alternatives in ES6.
    My little experience building a Firefox addon even suggests that
    sets replace arrays in most situations as most of what I do with
    arrays is .push, for-of and .map/filter/reduce (by the way,
    Set.prototype needs these too, but another topic for another time).


Realistically, this is a minority use case.
Agreed. I was just trying to share what I felt the future taste like.

The most common use case is a web-based application that often must work on platforms as old as IE8, and that shouldn't _limit_ the progress and evolution in ES6 features.
Ok, I think I better understand what you meant by "can't be iterable".


        Why shouldn't Array.from help them out?

    If these objects have a good reason to exist in an ES6 and above
    world, I agree, that's a good point. But is there a use case
    justifying their existence?


In the ES6 world, there will be userland and platform objects that can't be upgraded to real iterables, eg. application code that must behave correctly on platforms with and without @@iterator
Ok for userland objects, but do you have examples for platform objects? I feel that it's up to the W3C folks to add appropriate @@iterators to the objects they define... and it's already the case with indexed getters for instance [1]. (Firefox has already implemented it, you can for-of the result of qSA \o/). I wonder what you mean by "behave correctly on platforms with and without @@iterator". If you're targetting both types of platforms, you can't use the new facilities (for-of and spread), so you don't need for your objects to adhere to the iterable protocol.

(ie. browsers that have large market share but don't auto-update).
I already see IE10 market share being higher than IE9. IE8 might be the last browser without symbols

`for-of` won't even exist on these older platforms, but for code that only needs to run on ES6 platforms, Array.from provides a "spread" or "make iterable" mechanism for those objects that _can't_ be upgraded (for any reason, as noted above):

  // Turn a jQuery object into an iterable:
  Array.from(jQuery(".selector"));

(This can't be done with spread)
Why can't the code that only run in ES6 provide its own "make iterable" facility? As you said, it's polyfillable. I think spread is even "compile-to-ES3"-able.

Array.from bridges the gap between ES3/5 and ES6 while remaining useful in an ES6 and post ES6 world by providing an "assimilation" path for objects that have pre-existing constraints.
What you're indirectly saying here is that Array.from is not useful in an ES6-only code base (since @@iterator+spread can be used). Libraries (Array._from?) and tooling (compile spread to ES3) can be enough for the transition, no?

David

[1] http://heycam.github.io/webidl/#es-iterators
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to