`Reflect.ownKeys(x || {}).length === 0`? On Wed, Feb 13, 2019 at 10:31 PM Isiah Meadows <isiahmead...@gmail.com> 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 > cont...@isiahmeadows.com > www.isiahmeadows.com > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss