aboutsummaryrefslogtreecommitdiff
path: root/files/pt-br/web/javascript/reference/errors/cant_delete/index.md
blob: 954dfdbdf2ef155bd68282ecf5a5311b3e826890 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
---
title: 'TypeError: property "x" is non-configurable and can''t be deleted'
slug: Web/JavaScript/Reference/Errors/Cant_delete
tags:
  - Error
  - Errors
  - JavaScript
  - Strict Mode
  - TypeError
---
{{jsSidebar("Errors")}}

A exceção do Javascript "property is non-configurable and can't be deleted" ocorre
quando é feita a tentativa de deletar uma propriedade, mas a propriedade [não é configurável](/pt-BR/docs/Web/JavaScript/Data_structures#properties).

## Mensagem

```js
TypeError: Calling delete on 'x' is not allowed in strict mode (Edge)
TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
TypeError: Cannot delete property 'x' of #<Object> (Chrome)
```

## Tipo de Erro

{{jsxref("TypeError")}} apenas no modo strict.

## O que deu errado?

Foi feita a tentativa de deletar uma propriedade, mas esta propriedade [não é configurável](/pt-BR/docs/Web/JavaScript/Data_structures#properties). O
atributo `configurable` controla se a propriedade pode ser deletada do
objeto e se seus atributos (Exceto `writable`) podem ser alterados.

Este erro acontece apenas no modo [strict](/pt-BR/docs/Web/JavaScript/Reference/Strict_mode). No
modo de código não estrito, a operação retorna `false`.

## Exemplos

### Tentando excluir uma propriedade não configurável

Propriedades não configuráveis não são comuns, mas podem ser criadas usando
{{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.freeze()")}}.

```js example-bad
'use strict';
var obj = Object.freeze({name: 'Elsa', score: 157});
delete obj.score;  // TypeError

'use strict';
var obj = {};
Object.defineProperty(obj, 'foo', {value: 2, configurable: false});
delete obj.foo;  // TypeError

'use strict';
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray.pop();  // TypeError
```

Também existem algumas propriedades não configuráveis embutidas no Javascript. Talvez você tenha
tentado deletar uma constante matemática.

```js example-bad
'use strict';
delete Math.PI;  // TypeError
```

## Veja também

- [Operador delete](/pt-BR/docs/Web/JavaScript/Reference/Operators/delete)
- {{jsxref("Object.defineProperty()")}}
- {{jsxref("Object.freeze()")}}