Javascript: les chaînes primitives ont-elles des méthodes?

MDN déclare:

Primitive, valeur primitive

Une donnée qui n'est pas un objet et n'a aucune méthode. JavaScript a 5 types de données primitifs: chaîne, nombre, booléen, null, indéfini. À l'exception de null et undefined, toutes les valeurs primitives ont des équivalents d'objet qui s'ajustent autour des valeurs primitives, par exemple, un objet String s'emballe autour d'une primitive de chaîne. Toutes les primitives sont immuables.

Donc, lorsque nous appelons un "s".replace ou "s".anything est équivalent à new String("s").replace et new String("s").anything "s".anything ce new String("s").anything ?

Non, les primitives à cordes n'ont pas de méthodes. Comme pour les primitives numériques, le temps d'exécution de JavaScript les favorise dans des objets "String" à part entière lorsqu'ils sont invités à le faire par des constructions comme:

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

Dans certaines langues (eh bien, Java en particulier, mais je pense que le terme est d'usage commun), on dit que la langue "encode" les primitives dans leurs enveloppes d'objets, le cas échéant. Avec les chiffres, c'est un peu plus compliqué en raison des aléas de la grammaire symbolique; Vous ne pouvez pas simplement dire

 var foo = 27.toLocaleString(); 

parce que le "." Ne sera pas interprété comme vous en auriez besoin; toutefois:

 var foo = (27).toLocaleString(); 

Fonctionne bien. Avec des primitives de chaînes – et des booleans, pour cette matière – la grammaire n'est pas ambiguë, donc par exemple:

 var foo = true.toString(); 

marchera.

La réponse techniquement correcte est "non".

La réponse du monde réel est "non, mais ça fonctionnera de toute façon". C'est parce que lorsque vous faites quelque chose comme

 "s".replace() 

L'interprète sait que vous voulez effectivement opérer sur la chaîne comme si vous l'aviez créée avec

 var str = new String("s") 

Et agit donc comme si vous aviez fait cela.