var x = "wrong"; var t = {x: "x"}; var hits = 0; var p = new Proxy(t, { has(t, id) { var found = id in t; if (++hits == 2) delete t[id]; return found; }, get(t, id) { return t[id]; } }); with (p) x += " x"; // If you change this testcase (e.g. because we fix the number of // has() calls we end up making to match spec better), don't forget to // update bug1106982-2.js too. See also bug 1145641. assertEq(hits, 2); assertEq(t.x, "undefined x");