0. Test with object --- properties --- 1: undefined enumerable configurable writable 3: null enumerable configurable writable 110: value 10 111: value 11 enumerable 112: value 12 enumerable configurable 113: value 13 enumerable configurable writable 120: get 20 121: get 21 enumerable 122: get 22 enumerable configurable 125: undefined 126: undefined enumerable 127: undefined enumerable configurable abc: -12 enumerable configurable writable def: hello enumerable configurable writable xx10: value 10 xx11: value 11 enumerable xx12: value 12 enumerable configurable xx13: value 13 enumerable configurable writable xx20: get 20 xx21: get 21 enumerable xx22: get 22 enumerable configurable xx25: undefined xx26: undefined enumerable xx27: undefined enumerable configurable --- for-in enumerate --- 1: undefined 3: null 111: value 11 112: value 12 113: value 13 121: get 21 122: get 22 126: undefined 127: undefined abc: -12 def: hello xx11: value 11 xx12: value 12 xx13: value 13 xx21: get 21 xx22: get 22 xx26: undefined xx27: undefined 1. Test with array --- properties --- 0: -12 enumerable configurable writable 1: hello enumerable configurable writable 2: undefined enumerable configurable writable 3: null enumerable configurable writable 110: value 10 111: value 11 enumerable 112: value 12 enumerable configurable 113: value 13 enumerable configurable writable 120: get 20 121: get 21 enumerable 122: get 22 enumerable configurable 125: undefined 126: undefined enumerable 127: undefined enumerable configurable xx10: value 10 xx11: value 11 enumerable xx12: value 12 enumerable configurable xx13: value 13 enumerable configurable writable xx20: get 20 xx21: get 21 enumerable xx22: get 22 enumerable configurable xx25: undefined xx26: undefined enumerable xx27: undefined enumerable configurable length: 128 writable --- for-in enumerate --- 0: -12 1: hello 2: undefined 3: null 111: value 11 112: value 12 113: value 13 121: get 21 122: get 22 126: undefined 127: undefined xx11: value 11 xx12: value 12 xx13: value 13 xx21: get 21 xx22: get 22 xx26: undefined xx27: undefined 2. Test prototype with object *** Prototype *** 0: get 0 1: get 1 enumerable 2: SHOULD_NOT_enumerate_prototype enumerable 3: 3 5: 5 enumerable name: SHOULD_NOT_enumerate_prototype *** Object *** 10: get 10 11: get 11 enumerable 12: correct_original_instance enumerable 13: 13 15: 15 enumerable name: correct_original_instance *** for in *** 11: get 11 12: correct_original_instance 15: 15 1: get 1 2: correct_original_instance 5: 5 3. Test prototype with array *** Prototype *** 0: get 0 1: get 1 enumerable 2: SHOULD_NOT_enumerate_prototype enumerable 3: 3 5: 5 enumerable name: SHOULD_NOT_enumerate_prototype length: 6 writable *** Object *** 10: get 10 11: get 11 enumerable 12: correct_original_instance enumerable 13: 13 15: 15 enumerable name: correct_original_instance *** for in *** 11: get 11 12: correct_original_instance 15: 15 1: get 1 2: correct_original_instance 5: 5 4. Test String with String value 0 a TypeError : Object.defineProperty: argument is not an Object TypeError : Object.defineProperty: argument is not an Object 6 undefined TypeError : Object.defineProperty: argument is not an Object --- Properties --- 0: a enumerable 1: b enumerable 2: c enumerable 3: d enumerable length: 4 --- Enumerate --- TypeError : Object.defineProperty: argument is not an Object 5. Test String with String object 0 a TypeError : Cannot modify non-writable property '1' TypeError : Cannot redefine non-configurable property '2' 6 6 7 7 --- Properties --- 0: a enumerable 1: b enumerable 2: c enumerable 3: d enumerable 6: 6 enumerable configurable writable 7: 7 enumerable length: 4 --- Enumerate --- 0: a 1: b 2: c 3: d 6: 6 7: 7 6. Testing forin caching when forin changes from array to Es5array 0 1 2 0 1 2 8 7. Testing RegExp Number String Boolean Object Constructor length property attributes value:2 writable:false enumerable:false configurable:false value:1 writable:false enumerable:false configurable:false value:1 writable:false enumerable:false configurable:false value:1 writable:false enumerable:false configurable:false value:1 writable:false enumerable:false configurable:false