JavaScript/Objekte/Object/toLocaleString
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( )
Writable | true |
Enumerable | false |
Configurable | true |
Prototyp
Eigenschaften
Inhaltsverzeichnis
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.
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.
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.
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.
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.
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
- ECMAScript 2017 (7th Edition, ECMA-262): Object.prototype.toLocaleString
- ECMAScript 2015 (6th Edition, ECMA-262): Object.prototype.toLocaleString