Por que "foo" .bar = 42; `lança` TypeError` no modo estrito no ES6?

De acordo com a especificação ES5.1, o programa"use strict;" "foo".bar = 42; causa umString objeto a ser criado, atribui uma propriedade a ele e depois joga o objeto fora, resultando em nenhum efeito observável - incluindo exceções. (A ausência de efeito pode ser confirmada tentando-o em uma implementação JS compatível com ES5 como a do Opera 12.)

Nas implementações modernas de JS, lança umTypeError em vez disso, tente:

"use strict"; "foo".bar = 42;

Tenho certeza de que o novo comportamento é obrigatório pelas especificações do ES6, mas apesar de ler as seções relevantes várias vezes, não consigo ver onde está especificado queTypeError ser jogado. De fato,as partes principais parecem inalterados:

6.2.3.2 PutValue (V, W) #

ReturnIfAbrupt (V)ReturnIfAbrupt (W)Se digite (V) não é referência, lance umReferenceError exceção.Deixeibase ser GetBase (V)Se IsUnresolvableReference (V) é verdade, então…Senão, se IsPropertyReference (V) é verdade, entãouma. Se HasPrimitiveBase (V) é verdade, entãoEu. Afirmar: Nesse caso,base nunca será nulo ou indefinido.ii. Conjuntobase ToObject (base)b. Deixeiconseguiu estar ?base. [[Set]] (GetReferencedName (V),W, GetThisValue (V)).c. ReturnIfAbrupt (conseguiu)d. E seconseguiu é false e IsStrictReference (V) é verdade, jogue umTypeError exceção.e Retorna.…

Onde a especificação (ES6 ou mais recente) exige o lançamentoTypeError?

questionAnswers(2)

yourAnswerToTheQuestion