They don't optimize this. Also, in an earlier reply, I mentioned I'm not a fan of that kind of hack, especially considering the obvious `Reflect.ownKeys(x).length === 0` doesn't work when `x` is `null`/`undefined`, while `for ... of` does.
-----Isiah [email protected] On Thu, Feb 14, 2019 at 5:43 AM Herby Vojčík <[email protected]> wrote: > > On 14. 2. 2019 7:54, Jordan Harband wrote: > > `Reflect.ownKeys(x || {}).length === 0`? > > This seems to reify key list. That gist of the OP is probably to be able > to be able to tell fast enough if it's empty. > > Or are JS engines actually doing this fast (like returning "virtual" > keys list for which they can tell .length fast and only actually reify > the keys themselves lazily)? > > Herby > > > On Wed, Feb 13, 2019 at 10:31 PM Isiah Meadows <[email protected] > > <mailto:[email protected]>> wrote: > > > > This would be roughly equivalent to `Object.keys(value).length === 0`, > > but with a few exceptions: > > > > 1. If `value` is either `null` or `undefined`, it gracefully falls > > back to `false` instead of throwing an error. > > 2. It takes enumerable symbols into account, like `Object.assign`. > > > > So more accurately, it returns `false` if the value is neither `null` > > nor `undefined` and has an own, enumerable property, or `true` > > otherwise. > > > > It's something I sometimes use when dealing with object-based hash > > maps (like what you get from JSON, input attributes). I typically fall > > back to the (partially incorrect) `for ... in` with a `hasOwnProperty` > > check for string keys, but I'd like to see this as a built-in. > > > > There's also a performance benefit: engines could short-circuit this > > for almost everything with almost no type checks. It's also an obvious > > candidate to specialize for types. > > > > - If it's not a reference type (object or function), return `true`. > > - If it's not a proxy object, or a proxy object that doesn't define > > `getPropertyDescriptor` or `ownKeys`, it's often just a memory load, > > even with dictionary objects and arrays. > > - If it's a proxy object with `ownKeys` and/or > > `getOwnPropertyDescriptor`, this is the slow path, but you can still > > short-circuit when `ownKeys` returns an empty array. > > > > ----- > > > > Isiah Meadows > > [email protected] <mailto:[email protected]> > > www.isiahmeadows.com <http://www.isiahmeadows.com> > > _______________________________________________ > > es-discuss mailing list > > [email protected] <mailto:[email protected]> > > https://mail.mozilla.org/listinfo/es-discuss > > > > > > _______________________________________________ > > 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

