molily: Link mit festen Index möglich?

Beitrag lesen

ich ging davon aus, weil ich String-Methoden auch direkt auf "freistehende" Strings anwenden kann, so wie:
alert("foo".blink())

Wie gesagt, das geht, weil hier temporär ein String-Object aus "foo" erzeugt wird.

Daher meine Annahme, dass bei var foo = "bar"; ein String-Objekt entstünde und dass bei var baz = /foo/; ein RegExp-Objekt entstünde.

/foo/ erzeugt tatsächlich ein RegExp-Object.
Alle regulären Ausdrücke sind Objects, es gibt keine entsprechenden Primitives.

Wenn ich dich richtig verstanden habe passiert das aber erst wenn ich eine Methode darauf anwende _und_ es wird wieder in ein Primitive zurückverwandelt?

Ja. Es wird allerdings nicht zurückverwandelt, sondern die Methode erzeugt einfach einen neuen String-Primitive. Das String-Object wird verworfen.

So zumindest ist es definiert und dadurch erklärt sich das Verhalten von Objects vs. Primitives. Die JavaScript-Engines können das natürlich intern optimieren. Intern braucht es also keine Trennung geben, aber »nach außen« für den Programmierer ist die Unterscheidung sehr wirkmächtig.

Kannst du das für alle JS-Engines sicher sagen?

Ja. Das ist eine Grundlage von ECMAScript.

Mathias