load(libdir + "asserts.js" );
function testNonExtensible() {
var a = [1 , 2 , 3 , , 5 ];
Object.preventExtensions(a);
// Can change the value.
Object.defineProperty(a, 1 , {value:7 , enumerable: true , configurable: true , writable: true });
assertEq(JSON.stringify(Object.getOwnPropertyDescriptor(a, 1 )),
`{"value" :7 ,"writable" :true ,"enumerable" :true ,"configurable" :true }`);
// Can make non-writable, non-configurable, non-enumerable.
Object.defineProperty(a, 1 , {value:9 , enumerable: true , configurable: true , writable: false });
assertEq(JSON.stringify(Object.getOwnPropertyDescriptor(a, 1 )),
`{"value" :9 ,"writable" :false ,"enumerable" :true ,"configurable" :true }`);
Object.defineProperty(a, 0 , {value:4 , enumerable: true , configurable: false , writable: true });
assertEq(JSON.stringify(Object.getOwnPropertyDescriptor(a, 0 )),
`{"value" :4 ,"writable" :true ,"enumerable" :true ,"configurable" :false }`);
Object.defineProperty(a, 2 , {value:3 , enumerable: false , configurable: true , writable: true });
assertEq(JSON.stringify(Object.getOwnPropertyDescriptor(a, 2 )),
`{"value" :3 ,"writable" :true ,"enumerable" :false ,"configurable" :true }`);
// Turn into an accessor.
Object.defineProperty(a, 4 , {get:() => -2 , enumerable: true , configurable: true });
// Can't add new properties.
assertThrowsInstanceOf(() => Object.defineProperty(a, 3 ,
{value:4 , enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertThrowsInstanceOf(() => Object.defineProperty(a, 10 ,
{value:4 ,
enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertEq(a.toString(), "4,9,3,,-2" );
}
for (var i = 0 ; i < 15 ; i++)
testNonExtensible();
function testSealed() {
var a = [1 , 2 , 3 , , 5 ];
Object.seal(a);
// Can change the value.
Object.defineProperty(a, 1 , {value:7 , enumerable: true , configurable: false , writable: true });
assertEq(JSON.stringify(Object.getOwnPropertyDescriptor(a, 1 )),
`{"value" :7 ,"writable" :true ,"enumerable" :true ,"configurable" :false }`);
// Can make non-writable.
Object.defineProperty(a, 0 , {value:4 , enumerable: true , configurable: false , writable: false });
// Can't make configurable, non-enumerable.
assertThrowsInstanceOf(() => Object.defineProperty(a, 2 ,
{value:7 ,
enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertThrowsInstanceOf(() => Object.defineProperty(a, 2 ,
{value:7 ,
enumerable: false ,
configurable: false ,
writable: true }),
TypeError);
// Can't turn into an accessor.
assertThrowsInstanceOf(() => Object.defineProperty(a, 4 , {get:() => -2 ,
enumerable: true ,
configurable: true }),
TypeError);
// Can't add new properties.
assertThrowsInstanceOf(() => Object.defineProperty(a, 3 ,
{value:4 , enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertThrowsInstanceOf(() => Object.defineProperty(a, 10 ,
{value:4 ,
enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertEq(a.toString(), "4,7,3,,5" );
}
for (var i = 0 ; i < 15 ; i++)
testSealed();
function testFrozen() {
var a = [1 , 2 , 3 , , 5 ];
Object.freeze(a);
// Can redefine with same value/attributes.
Object.defineProperty(a, 0 , {value:1 , enumerable: true , configurable: false , writable: false });
// Can't change the value.
assertThrowsInstanceOf(() => Object.defineProperty(a, 1 ,
{value:7 ,
enumerable: true ,
configurable: false ,
writable: false }),
TypeError);
// Can't make configurable, non-enumerable.
assertThrowsInstanceOf(() => Object.defineProperty(a, 2 ,
{value:3 ,
enumerable: true ,
configurable: true ,
writable: false }),
TypeError);
assertThrowsInstanceOf(() => Object.defineProperty(a, 2 ,
{value:3 ,
enumerable: false ,
configurable: false ,
writable: false }),
TypeError);
// Can't turn into an accessor.
assertThrowsInstanceOf(() => Object.defineProperty(a, 4 , {get:() => -2 ,
enumerable: true ,
configurable: true }),
TypeError);
// Can't add new properties.
assertThrowsInstanceOf(() => Object.defineProperty(a, 3 ,
{value:4 , enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertThrowsInstanceOf(() => Object.defineProperty(a, 10 ,
{value:4 ,
enumerable: true ,
configurable: true ,
writable: true }),
TypeError);
assertEq(a.toString(), "1,2,3,,5" );
}
for (var i = 0 ; i < 15 ; i++)
testFrozen();
Messung V0.5 in Prozent C=89 H=85 G=86
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland