Source code

Revision control

Copy as Markdown

Other Tools

// Basics of @@unscopables support.
// In with(obj), if obj[@@unscopables][id] is truthy, then the identifier id
// is not present as a binding in the with-block's scope.
var x = "global";
with ({x: "with", [Symbol.unscopables]: {x: true}})
assertEq(x, "global");
// But if obj[@@unscopables][id] is false or not present, there is a binding.
with ({y: "with", z: "with", [Symbol.unscopables]: {y: false}}) {
assertEq(y, "with");
assertEq(z, "with");
}
// ToBoolean(obj[@@unscopables][id]) determines whether there's a binding.
let someValues = [0, -0, NaN, "", undefined, null, "x", {}, []];
for (let v of someValues) {
with ({x: "with", [Symbol.unscopables]: {x: v}})
assertEq(x, v ? "global" : "with");
}
reportCompare(0, 0);