- From: Domenic Denicola <notifications@github.com>
- Date: Fri, 13 Mar 2020 08:18:02 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/issues/852@github.com>
Consider ```webidl dictionary D { DOMString a; DOMString b = ""; }; interface I { D output(); }; ``` with the spec text > output(): > 1. Return a new `D`. If JavaScript code calls the `output()` method, do they get `{}`, or do they get `{ b: "" }`? --- My understanding was that they would get `{}`. From what I can tell, default values only apply when using dictionaries as inputs. This is circumstantially supported by text such as > In the ECMAScript binding, a value of undefined is treated as not present, or will trigger the default value where applicable. (only talks about the input, not the output) or > Dictionary members can also optionally have a default value, which is the value to use for the dictionary member when passing a value to a platform object that does not have a specified value. which doesn't make a lot of sense, but again is only talking about output, not input, or > On a given dictionary value, the presence of each dictionary member is optional, unless that member is specified as required which only mentions the presence being guaranteed if the value is `required`, and doesn't say anything about default values. And finally, the normative algorithms in https://heycam.github.io/webidl/#es-dictionary where "An ECMAScript value esDict is converted to an IDL dictionary type value" takes into account default values but "An IDL dictionary value V is converted to an ECMAScript Object value" does not mention them. --- However, there is one sentence which implies that maybe it should be `{ b: "" }`: > Dictionary members with default values are always considered to be present. If this is the case, then "An IDL dictionary value V is converted to an ECMAScript Object value" step 3.1.2 "If the dictionary member named key is present in V" would trigger, and we would define the `b` property. It's not anywhere formally defined that the value of _V_[_key_] is the default value given in the IDL definition, which is a bit suspicious, but maybe that was just an oversight. So... we're unsure what to do in Chromium here. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/heycam/webidl/issues/852
Received on Friday, 13 March 2020 15:18:15 UTC