We're looking for a person or people to help audit MDN to find places we could speed up. Is this you or someone you know? Check out the RFP: https://mzl.la/2IHcMiE

I volontari di MDN non hanno ancora tradotto questo articolo in Italiano. Unisciti a noi e traducilo tu stesso.
Puoi anche consultare l’articolo in English (US).


TypeError: can't delete non-configurable array element (Firefox)
TypeError: Cannot delete property '2' of [object Array] (Chrome)

Error type


What went wrong?

It was attempted to shorten the length of an array, but one of the array's elements is non-configurable. When shortening an array, the elements beyond the new array length will be deleted, which failed in this situation.

The configurable attribute controls whether the property can be deleted from the object and whether its attributes (other than writable) can be changed.

Usually, properties in an object created by an array initializer are configurable. However, for example, when using Object.defineProperty(), the property isn't configurable by default.


Non-configurable properties created by Object.defineProperty

The Object.defineProperty() creates non-configurable properties by default if you haven't specified them as configurable.

var arr = [];
Object.defineProperty(arr, 0, {value: 0}); 
Object.defineProperty(arr, 1, {value: "1"});

arr.length = 1;
// TypeError: can't delete non-configurable array element

You will need to set the elements as configurable, if you intend to shorten the array.

var arr = [];
Object.defineProperty(arr, 0, {value: 0, configurable: true});
Object.defineProperty(arr, 1, {value: "1", configurable: true});

arr.length = 1;

Seal-ed Arrays

The Object.seal() function marks all existing elements as non-configurable.

var arr = [1,2,3];

arr.length = 1;
// TypeError: can't delete non-configurable array element

You either need to remove the Object.seal() call, or make a copy of it. In case of a copy, shortening the copy of the array does not modify the original array length.

var arr = [1,2,3];

// Copy the initial array to shorten the copy
var copy = Array.from(arr);
copy.length = 1;
// arr.length == 3

See also

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: SphinxKnight, fscholz, nbp
 Ultima modifica di: SphinxKnight,