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

Reply via email to