>Why would this be better than `const a = []; Object.setPrototypeOf(a, null)`?
In that example "a" value would still have "own" properties like length. a = Array.create(null, 10) Wouldn't have any own or prototype properties by design; It is mean to be "bare-bones" or as close to a C-like: a = malloc(sizeof(void*)*10) as JavaScript could potentially get. On Thu, Jan 10, 2019 at 11:54 AM Jordan Harband <[email protected]> wrote: > Why would this be better than `const a = []; Object.setPrototypeOf(a, > null)`? > > On Thu, Jan 10, 2019 at 12:09 AM Sultan <[email protected]> wrote: > >> >An array with no prototype wouldn't have any of the iteration methods on >> it... >> >> Yes, that is what is intended with this, similar to an >> Object.create(null) object with number-ed keys. >> >> Alternatively one could look at the objects created from this to be the >> "bare-bones" structure around these data-structures. >> >> That is the in-existence of prototypes and own properties like "length" >> makes it clear that these "flat" objects are intended as author managed >> objects. >> >> There are is no visible default prototype or own properties because the >> author will create, expose and managed these for the data-structure >> explicitly if need be or more commonly choose to not expose the >> data-structure at all and use these for low-level internal book keeping for >> other abstractions. >> >> This would create a new ceiling(or ground-level) for how "low-level" one >> could go with JavaScript if these where part for the language and as a >> secondary consequence allow engines to make stronger assumptions with >> regards to operations on these structs. >> >> On Thu, Jan 10, 2019 at 9:48 AM Jordan Harband <[email protected]> wrote: >> >>> An array with no prototype wouldn't have any of the iteration methods on >>> it; a function with no prototype wouldn't have .call/.bind/.apply - length >>> and name are own properties of functions, and length is an own property of >>> an array, so you'd get those regardless. >>> >>> (`Array.from({ length: 1000 })` already creates an array of length 1000 >>> without holes, fwiw) >>> >>> On Wed, Jan 9, 2019 at 10:43 PM Sultan <[email protected]> wrote: >>> >>>> Identical to Object.create but for Arrays and Functions. >>>> >>>> This method will allow you to create arrays with no prototype. >>>> >>>> This would allow authors the ability to use array objects as state >>>> containers without the need to resort to index-based objects with >>>> >>>> Object.create(null, length) >>>> >>>> When you want to both use an array-like struct as both a property and >>>> index-able map. >>>> >>>> A side-effect of this would afford engines a strong heuristic for >>>> avoiding holey-array look-ups operations when there's no prototype to walk. >>>> >>>> For example the following would create an array with a length of 1000 >>>> without "holes". >>>> >>>> const arr = Array.create(null, 1000) >>>> >>>> In addition this could also apply to functions with >>>> >>>> Function.create(null, () => {}) >>>> >>>> When you want to use functions as state-containers but don't want any >>>> of the implicit properties(length, name) etc. >>>> _______________________________________________ >>>> 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

