Proposal: `Object.isEmpty(value)`

Andrea Giammarchi andrea.giammarchi at gmail.com
Thu Feb 14 13:54:47 UTC 2019


> 1. If `value` is either `null` or `undefined`, it gracefully falls back
to `false` instead of throwing an error.

I am having hard time logically thinking of an empty void as false:

Object.isEmpty(void 0) is false ?

I think keys(o || {}).length === 0 is a more explicit, ambiguity free,
alternative.

isEmpty(null) === false when typeof null is still object also doesn't feel
too right.


On Thu, Feb 14, 2019 at 7:31 AM Isiah Meadows <isiahmeadows at 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
> contact at isiahmeadows.com
> www.isiahmeadows.com
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20190214/e9de2424/attachment.html>


More information about the es-discuss mailing list