receiver-is-not-object.js (1370B)
1 // Copyright (C) 2015 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 es6id: 26.1.13 5 description: > 6 Return false if receiver is not an object. 7 info: | 8 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] ) 9 10 ... 11 4. If receiver is not present, then 12 a. Let receiver be target. 13 5. Return target.[[Set]](key, V, receiver). 14 15 9.1.9 [[Set]] ( P, V, Receiver) 16 17 ... 18 4. If ownDesc is undefined, then 19 a. Let parent be O.[[GetPrototypeOf]](). 20 b. ReturnIfAbrupt(parent). 21 c. If parent is not null, then 22 i. Return parent.[[Set]](P, V, Receiver). 23 d. Else, 24 ii. Let ownDesc be the PropertyDescriptor{[[Value]]: undefined, 25 [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}. 26 5. If IsDataDescriptor(ownDesc) is true, then 27 a. If ownDesc.[[Writable]] is false, return false. 28 b. If Type(Receiver) is not Object, return false. 29 ... 30 features: [Reflect, Reflect.set] 31 ---*/ 32 33 var o1 = { 34 p: 42 35 }; 36 var receiver = 'receiver is a string'; 37 var result = Reflect.set(o1, 'p', 43, receiver); 38 39 assert.sameValue(result, false, 'returns false'); 40 assert.sameValue(o1.p, 42, 'does not set a value'); 41 assert.sameValue( 42 receiver.hasOwnProperty('p'), false, 43 'does not set a new property on receiver if it is not an object' 44 ); 45 46 reportCompare(0, 0);