From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/errors/read-only/index.html | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 files/pt-br/web/javascript/reference/errors/read-only/index.html (limited to 'files/pt-br/web/javascript/reference/errors/read-only/index.html') diff --git a/files/pt-br/web/javascript/reference/errors/read-only/index.html b/files/pt-br/web/javascript/reference/errors/read-only/index.html new file mode 100644 index 0000000000..fa7770fbcf --- /dev/null +++ b/files/pt-br/web/javascript/reference/errors/read-only/index.html @@ -0,0 +1,81 @@ +--- +title: 'TypeError: "x" is read-only' +slug: Web/JavaScript/Reference/Errors/Read-only +tags: + - Erros + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Read-only +--- +
{{jsSidebar("Errors")}}
+ +

Mensagem

+ +
TypeError: "x" is read-only (Firefox)
+TypeError: 0 is read-only (Firefox)
+TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)
+TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)
+
+ +

Tipo de Erro

+ +

{{jsxref("TypeError")}}

+ +

O que deu errado?

+ +

A variável global ou propriedade do objeto foi definida como propriedade somente-leitura. (Tecnicamente, esse é um dado de não-escrita.)

+ +

Esse erro ocorre apenas em código no strict mode. No modo não strict mode, essa atribuição é ignorada silenciosamente.

+ +

Exemplos

+ +

Casos inválidos

+ +

Propriedades somente-leitura não são super comuns, mas elas podem ser criadas utilizando {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.freeze()")}}.

+ +
'use strict';
+var obj = Object.freeze({nome: 'Elsa', pontuacao: 157});
+obj.pontuacao = 0;  // TypeError
+
+'use strict';
+Object.defineProperty(this, 'CONTADOR_PULMAO', {value: 2, writable: false});
+CONTADOR_PULMAO = 3;  // TypeError
+
+'use strict';
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray[0]++;  // TypeError
+
+ +

Existem também algumas propriedades somente-leitura nativas do Javascript. Talvez você já tentou redefinir um constante matemática.

+ +
'use strict';
+Math.PI = 4;  // TypeError
+
+ +

Desculpe, você não pode fazer isso.

+ +

A variável global undefined também é somente-leitura, então você não pode silenciar o infame erro "undefined is not a function" fazendo isso:

+ +
'use strict';
+undefined = function() {};  // TypeError: "undefined" is read-only
+
+ +

Casos válidos

+ +
'use strict';
+var obj = Object.freeze({nome: 'Score', pontos: 157});
+obj = {nome: obj.nome, pontos: 0};   // substituindo com o novo objeto funciona
+
+'use strict';
+var CONTADOR_PULMAO = 2;  // uma `var` funciona, porque ela não é somente-leitura
+CONTADOR_PULMAO = 3;  // ok (anatomicamente improvável, porém...)
+
+ +

Veja também

+ + -- cgit v1.2.3-54-g00ecf