Re: WindowProxy as the key in ES6 Set/Map/WeakSet/WeakMap

On Wed, Apr 16, 2014 at 7:13 AM, Adam Barth <> wrote:

> On Wed, Apr 16, 2014 at 6:57 AM, Domenic Denicola <
>> wrote:
>> Let’s put it this way; perhaps what Mark’s saying will be clearer.
>> Given:
>> ```js
>> const m = new Map();
>> m.set(windowProxyInstance, "foo");
>> ```
>> (and given that nothing else is added to `m`), then `m.get(x) === "foo"`
>> should be true _if and only if_ SameValueZero(x, windowProxyInstance) is
>> true (which in this case reduces to `x === windowProxyInstance`).
>> Window proxies should do nothing to violate this invariant of `Map`s.
>> With that in mind, is there something special about window proxies that
>> would allow them to abide by this invariant but still run into the
>> questions and problems stated in this thread?
> Presumably you would agree that if I wrote:
> windowProxyInstance = someOtherObject;
> then operator=== questions about windowProxyInstance wouldn't be relevant
> for answering questions about how m.get behaves.
> One way of phrasing the original question is asking whether navigating a
> browsing context keeps the identity of the windowProxyInstance constant or
> whether the identity of the windowProxyInstance changes and all fields
> containing a reference to the previous windowProxyInstance are updated to
> refer to the new windowProxyInstance.
> I don't believe there's an experiment you can run today in browsers to
> answer that question.  Map would give you a way to answer that question,
> which is why we need to decide what the answer ought to be.

It might be interesting to think about how private names interact with

var tools = (function () {
  private unique;
  function store(x) { x.unique = 42; }
  function check(x) { return x.unique === 42; }
  return { store: store, check: check };

const m = new WeakMap();

var a = ....;
m.set(a, 42);

var b = ....
print tools.check(b);
print m.get(b);

Assuming there are no other callers of |store| and no other values added to
m, is it possible for this program to print two different values with the
two print statements?


Received on Wednesday, 16 April 2014 14:24:14 UTC