Proposal: `Object.isEmpty(value)`

Isiah Meadows isiahmeadows at gmail.com
Thu Feb 14 14:14:18 UTC 2019


I meant `true` for those - I had my conditions flipped. My bad.

-----

Isiah Meadows
contact at isiahmeadows.com
www.isiahmeadows.com

On Thu, Feb 14, 2019 at 8:55 AM Andrea Giammarchi
<andrea.giammarchi at gmail.com> wrote:
>
> > 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


More information about the es-discuss mailing list