getOwnPropertyDescriptor side effects

Isiah Meadows isiahmeadows at gmail.com
Thu Jan 12 21:04:38 UTC 2017


Okay, so it's a V8 bug. Filed it here:
https://bugs.chromium.org/p/v8/issues/detail?id=5834

On Thu, Jan 12, 2017, 03:03 T.J. Crowder <tj.crowder at farsightsoftware.com>
wrote:

> So to sum up, then, and circle back to Francisco Tolmasky's original
> question:
>
> * For ordinary objects, `Object.getOwnPropertyDescriptor` shouldn't
> have side-effects because none of the ordinary operations it uses has
> side effects.
> * For exotic objects, it may well have side effects as a result of an
> exotic version of [[GetOwnProperty]]; for instance, Adam Klein's
> `Proxy` example.
> * `Error` objects are specified as ordinary objects.
> * V8's `Error` object has a `stack` property that claims to be a value
> property (not an accessor).
> * V8's `Error` object is a exotic object, it has exotic behavior for
> [[GetOwnProperty]], because it triggers filling in the string for the
> captured stack trace if you call it for `stack` (it has to, in order
> to provide the `value` property of the descriptor, since `stack`
> claims to be a value property).
> * This aspect of V8's `Error` could be in-spec by making `stack` an
> accessor instead (or by building the string earlier, but it's deferred
> for performance reasons).
>
> Is that a reasonable summary?
>
> Additionally, I believe the only exotic object defined by the
> specification that has a [[GetOwnProperty]] with potential side
> effects is `Proxy`.
>
> Provided that's all correct, Francisco's answer is: Per spec, you
> can't rely on `Object.getOwnPropertyDescriptor` not having side
> effects unless you can guarantee you're not dealing with a `Proxy`.
> Per spec, you could for non-`Proxy` objects defined by the
> specification, but that's not currently the case with V8 (at least).
> And there's always the possibility of host objects having exotic
> [[GetOwnProperty]] behavior.
>
> -- T.J.
> _______________________________________________
> 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/20170112/085e0392/attachment.html>


More information about the es-discuss mailing list