property-enumeration-order.js (1271B)
1 function check(obj, expected, expectedAll = expected) { 2 assertEq(Reflect.ownKeys(obj).join(""), expectedAll); 3 assertEq(Object.getOwnPropertyNames(obj).join(""), expectedAll); 4 assertEq(Object.keys(obj).join(""), expected); 5 var s = ""; 6 for (var x in obj) 7 s += x; 8 assertEq(s, expected); 9 } 10 11 var obj = {2: 0, 0: 0, "foo": "bar", 4: 0, "-5": 1}; 12 check(obj, "024foo-5"); 13 obj.x = 1; 14 check(obj, "024foo-5x"); 15 obj[1] = 1; 16 check(obj, "0124foo-5x"); 17 obj[1.2] = 1; 18 check(obj, "0124foo-5x1.2"); 19 Object.defineProperty(obj, '3', {value:1,enumerable:false,configurable:false,writable:false}); 20 check(obj, "0124foo-5x1.2", "01234foo-5x1.2"); 21 delete obj[2]; 22 check(obj, "014foo-5x1.2", "0134foo-5x1.2"); 23 obj[2] = 1; 24 check(obj, "0124foo-5x1.2", "01234foo-5x1.2"); 25 26 assertEq(JSON.stringify(obj), '{"0":0,"1":1,"2":1,"4":0,"foo":"bar","-5":1,"x":1,"1.2":1}'); 27 28 var arr = [1, 2, 3]; 29 Object.defineProperty(arr, '3', {value:1,enumerable:true,configurable:true,writable:true}); 30 check(arr, "0123", "0123length"); 31 Object.defineProperty(arr, '1000', {value:1,enumerable:true,configurable:true,writable:false}); 32 check(arr, "01231000", "01231000length"); 33 34 arr = [1, 2, , , 5]; 35 check(arr, "014", "014length"); 36 arr[0xfffffff] = 4; 37 check(arr, "014268435455", "014268435455length");