blob: e19aa7e2a3da37c2ec814d7d24d9d694df91fab7 (
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
|
---
title: 'TypeError: can''t assign to property "x" on "y": not an object'
slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property
tags:
- Error
- Errors
- JavaScript
- TypeError
---
{{jsSidebar("Errors")}}
A exceção do modo strict do Javascript "can't assign to property" ocorre quando é feita
a tentativa de criar uma propriedade em um valor [primitivo](/pt-BR/docs/Glossary/Primitive)
como um [symbol](/pt-BR/docs/Glossary/Symbol), uma [string](/pt-BR/docs/Glossary/String), um [number](/pt-BR/docs/Glossary/Number) ou um [boolean](/pt-BR/docs/Glossary/Boolean).
Valores [primitivos](/pt-BR/docs/Glossary/Primitive) nâo podem ter nenhuma [propriedade](/pt-BR/docs/Glossary/property/JavaScript).
## Mensagem
```js
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
TypeError: Cannot create property 'x' on {y} (Chrome)
```
## Tipo de Erro
{{jsxref("TypeError")}}.
## O que deu errado?
No {{jsxref("Strict_mode")}}, um {{jsxref("TypeError")}} é gerado quando é feita a tentativa de
criar uma propriedade em um valor [primitivo](/pt-BR/docs/Glossary/Primitive) como
um [symbol](/pt-BR/docs/Glossary/Symbol), uma [string](/pt-BR/docs/Glossary/String), um [number](/pt-BR/docs/Glossary/Number) ou um [boolean](/pt-BR/docs/Glossary/Boolean).
Valores [primitivos](/pt-BR/docs/Glossary/Primitive) não podem ter nenhuma [propriedade](/pt-BR/docs/Glossary/property/JavaScript).
O problema pode ser que um valor inesperado está em um lugar inesperado, ou
que uma variante de objeto de uma {{jsxref("String")}} ou um {{jsxref("Number")}} é esperado.
## Exemplos
### Casos inválidos
```js example-bad
'use strict';
var foo = "minha string";
// A linha a seguir não faz nada se não estiver em modo strict.
foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
```
### Corrigindo o problema
Corrija o código para evitar que um [primitivo](/pt-BR/docs/Glossary/Primitive) seja usado em tais lugares, ou corrija o problema criando o objeto homólogo {{jsxref("Object")}}.
```js example-good
'use strict';
var foo = new String("minha string");
foo.bar = {};
```
## Veja também
- {{jsxref("Strict_mode")}}
- [Primitivo](/pt-BR/docs/Glossary/Primitive)
|