javascript: as strings primitivas têm methods?

MDN afirma:

valor primitivo primitivo

Um dado que não é um object e não possui nenhum método. JavaScript tem 5 tipos de dados primitivos: string, number, boolean, null, undefined. Com a exceção de null e undefined, todos os valores primitivos possuem equivalentes de object que envolvem os valores primitivos, por exemplo, um object String envolve uma primitiva de string. Todos os primitivos são imutáveis.

Então, quando chamamos um "s".replace ou "s".anything é equivalente a new String("s").replace "s".anything e new String("s").replace "s".anything new String("s").anything ?

Não, as primitivas de string não possuem methods. Tal como acontece com primitivos numéricos, o tempo de execução JavaScript irá promovê-los para full-blown “String” objects quando chamados a fazê-lo por construções como:

 var space = "hello there".indexOf(" "); 

Em algumas linguagens (bem, Java em particular, mas acho que o termo é de uso comum) é dito que a linguagem “coloca” as primitivas em seus invólucros de object quando apropriado. Com números, é um pouco mais complicado devido aos caprichos da gramática do token; você não pode simplesmente dizer

 var foo = 27.toLocaleString(); 

porque o “.” não será interpretado da maneira que você precisa que seja; Contudo:

 var foo = (27).toLocaleString(); 

funciona bem. Com primitivos de string – e booleanos, a gramática não é ambígua, por exemplo:

 var foo = true.toString(); 

vai funcionar.

A resposta tecnicamente correta é “não”.

A resposta do mundo real é “não, mas vai funcionar de qualquer maneira”. Isso porque quando você faz algo como

 "s".replace() 

o intérprete sabe que você quer realmente operar na corda como se você a tivesse criado com

 var str = new String("s") 

e, portanto, age como se você tivesse feito isso.