|
1 let invoked = false; |
|
2 Object.defineProperty(Array.prototype, '0', {set: function () { |
|
3 invoked = true; |
|
4 }}); |
|
5 |
|
6 let result = [1, 2, 3].slice(1); |
|
7 assertEq(invoked, false); |
|
8 |
|
9 let proxy = new Proxy({}, { |
|
10 get: function (target, name, proxy) { |
|
11 switch (name) { |
|
12 case "length": |
|
13 return 2; |
|
14 case "0": |
|
15 return 15; |
|
16 case "1": |
|
17 // Should not invoke [[Get]] for this hole. |
|
18 default: |
|
19 assertEq(false, true); |
|
20 } |
|
21 }, |
|
22 has: function (target, name) { |
|
23 switch (name) { |
|
24 case "0": |
|
25 return true; |
|
26 case "1": |
|
27 return false; |
|
28 default: |
|
29 assertEq(false, true); |
|
30 } |
|
31 } |
|
32 }) |
|
33 result = Array.prototype.slice.call(proxy, 0); |
|
34 assertEq(result.length, 2); |
|
35 assertEq(0 in result, true); |
|
36 assertEq(1 in result, false); |
|
37 assertEq(result[0], 15); |