<div dir="ltr"><div dir="ltr">> 1. If `value` is either `null` or `undefined`, it gracefully falls back to `false` instead of throwing an error.</div><div dir="ltr"><br></div><div>I am having hard time logically thinking of an empty void as false:</div><div><br></div><div>Object.isEmpty(void 0) is false ?</div><div><br></div><div>I think keys(o || {}).length === 0 is a more explicit, ambiguity free, alternative.</div><div><br></div><div>isEmpty(null) === false when typeof null is still object also doesn't feel too right.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 14, 2019 at 7:31 AM Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com">isiahmeadows@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">This would be roughly equivalent to `Object.keys(value).length === 0`,<br>
but with a few exceptions:<br>
<br>
1. If `value` is either `null` or `undefined`, it gracefully falls<br>
back to `false` instead of throwing an error.<br>
2. It takes enumerable symbols into account, like `Object.assign`.<br>
<br>
So more accurately, it returns `false`  if the value is neither `null`<br>
nor `undefined` and has an own, enumerable property, or `true`<br>
otherwise.<br>
<br>
It's something I sometimes use when dealing with object-based hash<br>
maps (like what you get from JSON, input attributes). I typically fall<br>
back to the (partially incorrect) `for ... in` with a `hasOwnProperty`<br>
check for string keys, but I'd like to see this as a built-in.<br>
<br>
There's also a performance benefit: engines could short-circuit this<br>
for almost everything with almost no type checks. It's also an obvious<br>
candidate to specialize for types.<br>
<br>
- If it's not a reference type (object or function), return `true`.<br>
- If it's not a proxy object, or a proxy object that doesn't define<br>
`getPropertyDescriptor` or `ownKeys`, it's often just a memory load,<br>
even with dictionary objects and arrays.<br>
- If it's a proxy object with `ownKeys` and/or<br>
`getOwnPropertyDescriptor`, this is the slow path, but you can still<br>
short-circuit when `ownKeys` returns an empty array.<br>
<br>
-----<br>
<br>
Isiah Meadows<br>
<a href="mailto:contact@isiahmeadows.com" target="_blank">contact@isiahmeadows.com</a><br>
<a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>