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