TypeError: can't assign to property "x" on "y": not an object

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 como um symbol, uma string, um number ou um boolean. Valores primitivos nâo podem ter nenhuma propriedade.

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

O que deu errado?

No Strict_mode, um TypeError é gerado quando é feita a tentativa de criar uma propriedade em um valor primitivo como um symbol, uma string, um number ou um boolean. Valores primitivos não podem ter nenhuma propriedade.

O problema pode ser que um valor inesperado está em um lugar inesperado, ou que uma variante de objeto de uma String ou um Number é esperado.

Exemplos

Casos inválidos

js
"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 seja usado em tais lugares, ou corrija o problema criando o objeto homólogo Object.

js
"use strict";

var foo = new String("minha string");
foo.bar = {};

Veja também