JavaScript/Objekte/Object/toLocaleString

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Methode toLocaleString gibt wie die Methode toString eine Zeichenkette zurück, die das Objekt repräsentiert. Der Rückgabewert kann sich jedoch, abhängig vom Typ des Objektes für das die Methode aufgerufen wird, von dem String unterscheiden, der von der Methode toString zurückgegeben wird.


Syntax

Object.prototype.toLocaleString( )


Attribute
Writable true
Enumerable false
Configurable true


Prototyp


Eigenschaften


Beschreibung

Die Methode toLocaleString besitzt keinen formalen Parameter und ist entsprechend ohne Argumente aufzurufen. Der Rückgabewert der Methode ist dann eine Stringrepräsentation des Objektes, mit dem die Funktionsvariable this von toLocaleString beim Aufruf initialisiert wurde.


Beispiel
console.log({ }.toLocaleString( )); // [object Object]

console.log({ }.toString( )); // [object Object]


Wird die Methode toLocaleString auf einem planen Objekt aufgerufen, entspricht der Rückgabewert exakt dem der Methode toString von Object.prototype. Was allerdings kein Zufall ist, denn intern wird diese Methode von toLocaleString aufgerufen, wobei eine Referenz auf das Objekt übergeben wird, in dessen Kontext die Methode ausgeführt wird. Dass die auf Object.prototype definierte Methode toString aufgerufen wird gilt allerdings nur für plane Objekte.


Beispiel
const array = [16, 32, 64];

console.log(Object.prototype.toString.call(array)); // [object Array]

console.log(Object.prototype.toLocaleString.call(array)); // 16, 32, 64


In diesem Beispiel wird zunächst in Literalschreibweise ein Array erzeugt und einer Konstante als Wert zugewiesen. Unter Verwendung der Methode call wird dann die auf Object.prototype definierte Methode toString im Kontext dieses Arrays aufgerufen, das heißt, der Wert der Funktionsvariable this von toString wird mit einer Referenz auf das Array initialisiert. Die Ausgabe in der Konsole ist dann der für diese Methode typische String mit dem Tag Array an zweiter Stelle innerhalb der eckigen Klammern. Auf die gleiche Weise wird schließlich die Methode toLocaleString aufgerufen, diesmal jedoch mit einem anderen Ergebnis.


Hinweis:
Dass die Methoden toString und toLocaleString hier nicht direkt auf dem Array aufgerufen wurden, sondern über den Umweg mit der Methode call liegt darin begründet, dass bei einem direkten Aufruf auf dem Array nicht die beiden auf Object.prototype definierten Methoden referenziert worden wären, sondern ihre Pendants auf dem direkten Vorfahren des Arrays innerhalb der Prototypenkette, also dem Objekt Array.prototype. Womit das Geheimnis der unterschiedlichen Ausgaben auch schon beinahe gelüftet wäre.


Der Grund dafür, dass von der Methode toLocaleString in dem Beispiel oben etwas anders ausgegeben wird als von der Methode toString ist nun, dass hier intern von toLocaleString nicht die native Methode toString von Object.prototype aufgerufen wird, sondern die gleichnamige Methode von Array.prototype. Die von toLocaleString intern aufgerufene Methode toString wird also nicht direkt über Object.prototype referenziert, sondern über das Objekt in dessen Kontext toLocaleString ausgeführt wird. Dies führt dazu, dass hier über die Prototypenkette die entsprechende Arraymethode referenziert wird, welche eine an den Typ Array angepasste Stringrepräsentation zurückgibt.

Alternative Stringrepräsentationen

Tatsächlich besteht der Zweck der Methode toLocaleString auf Object.prototype vornehmlich darin, ein Fallback zu sein für Objekte, die keine keine eigene Methode dieses Namens besitzen und eine solche auch nicht anderweitig über die Prototypenkette erben. Denn unter bestimmten Umständen wird auf einem Objekt die Methode toLocaleString implizit aufgerufen. Die meisten eingebauten Objekt-Typen besitzen jedoch eine solche Methode und wenn sie aufgerufen wird, dann wird abhängig vom Objekt-Typ eine von toString verschiedene, an das jeweilige System angepasste alternative Stringrepräsentation des Objektes erzeugt, in dessen Kontext die Methode ausgeführt wird.


Beispiel
const date = new Date;

console.log(date.toString( )); // Sat Nov 28 2015 14:56:44 GMT+0100

console.log(date.toLocaleString( )); // 28.11.2015, 14:56:44


Zum Beispiel wird vom Konstruktor Date für seine Instanzen sowohl eine eigene Methode toString, als auch eine eigene Methode toLocaleString bereitgestellt. Wie man in dem Beispiel oben sehen kann, wird hier nun durch die Methode toLocaleString intern nicht einfach die Methode toString aufgerufen, sondern es wird eine alternative, systemspezifische Stringrepräsentation des erzeugten Objektes zurückgegeben. Diese Methode toLocaleString stellt also gewissermaßen eine, die lokale Ausführungsumgebung berücksichtigende Variante der Funktion toString dar.

Eigene Eigenschaften

Wie die anderen auf Object.prototype definierten Methoden auch, besitzt die Methode toLocaleString zwei eigene Eigenschaften mit den Namen length und name. Die Eigenschaft length besitzt hier den numerischen Wert 0, da die Methode über keine formalen Parameter verfügt. Von der Eigenschaft name wird der Name von toLocaleString in Form eines Strings zurückgegeben.


Beispiel
console.log({ }.toLocaleString.name); // toLocaleString

console.log({ }.toLocaleString.length); // 0


Beide Eigenschaften sind schreibgeschützt aber konfigurierbar, können also durch explizite Definition verändert werden. Jedoch ist auch hier der obligatorische Hinweis angebracht, dass es eine schlechte Praxis darstellt, an eingebauten Objekten Veränderungen vorzunehmen, da es meist nicht absehbar ist, ob hierdurch nicht gegebenenfalls zu einem späteren Zeitpunkt Probleme entstehen. Entsprechend ist von der Manipulation dieser Eigenschaften abzuraten.

Weblinks