summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/lexical-environment/unscopables-basics.js
blob: 4032b277462c1517f69a13f4830fe170364c9af4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 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);