Réponse courte : parfois oui, parfois non.
Je suis également tombé sur la même question et je me suis penché sur le sujet. Il semble que l'internage se fasse généralement pour les chaînes littérales qui sont générées de la même manière (par exemple, en assignant toujours la même chaîne à une variable dans la même boucle), MAIS j'ai également pu créer un exemple qui aboutit à la création de deux chaînes identiques avec deux références différentes :
Comme vous pouvez le voir, chaque chaîne est stockée deux fois, avec des références différentes.
Voici le code que j'ai utilisé pour générer les chaînes de caractères en double :
const a = [];
const b = [];
for(let j =1; j<= 100;++j){
for(let i = 1; i <= 10000; ++i) a[i] = 'player 1 got 5 points from player 2' + i;
for(let i = 1; i <= 10000; ++i) b[i] = 'player 1 got 5 points from player 2' + i;
}
Il semble que l'internage de chaîne soit effectué pour les littéraux de chaîne, mais pas pour les valeurs de chaînes concaténées, mais comme vous pouvez le voir ci-dessus, chaque chaîne concaténée n'apparaît que deux fois, et non 100x2 = 200 fois, donc l'internage de chaîne est toujours effectué pour les chaînes concaténées créées dans la boucle externe.