slice.js (884B)
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);