Bei Ruby etwa ist das anders, dort gibt es die Unterscheidung zwischen Methoden, die ein neues Objekt erzeugen und solchen, die das vorhandene ändern. Letztere enden auf »!«
Schon z.B. String#insert ist ein Gegenbeispiel für diese "Regel".
Ich wollte damit nicht behaupten, dass eine Regel existiert, dass sämtliche Methoden, die das Objekt ändern, auf »!« enden. Ich meinte nur, dass der besagte Unterschied zwischen gleichnamigen Methoden, wie ich sie im Beispiel vorgestellt habe, durch »!« gekennzeichnet wird. Freilich wird »!« i.d.R. nur eingesetzt, wenn es eine gleichnamige Methode ohne entsprechende Side-Effects gibt, oder wenn man sonst wie auf die möglichen Side-Effects hinweisen will.
Das Beispiel sollte zeigen, dass es in Ruby überhaupt String-Methoden geben kann, die den String selbst ändern, und dass man zwischen diesen und solchen unterscheiden kann, die einen neuen String zurückgeben. Das ist in JavaScript eben prinzipiell unmöglich, daher habe ich den Vergleich zu Ruby gezogen, um den Unterschied zu illustrieren.
Mathias