Metoda JavaScript toString(), vysvětleno + příklady

Jednou z nejběžnějších věcí, které budete chtít s proměnnou udělat, je vytisknout její řetězcovou reprezentaci. To je to, co toString() metoda je pro. Tento článek vysvětlí, kdy a jak jej můžete použít.

Převod na řetězce

Data zobrazená na obrazovce počítače se nejčastěji zobrazují jako textové řetězce, bez ohledu na to, jak byla data uložena. Čísla, pole, booleovské hodnoty a objekty, všechny mají řetězcové reprezentace, které umožňují jejich zobrazení jako text na obrazovce, buď pro uživatele ke čtení, nebo pro účely ladění.

K převodu neřetězcových hodnot na řetězce pro zobrazení se používají různé metody v závislosti na typu proměnné převáděné na řetězec.

Konverze vs nátlak

Než tyto metody prozkoumáme, nestojí za to, že existují dvě způsoby, jak lze proměnnou převést na řetězec, bez  toString() metoda je volána přímo.

Konverze typu je explicitní převod proměnné na řetězec:

var myString = String(MyVariable);

To se provede explicitním voláním String() konstruktoru k vytvoření nové proměnné typu String z daného parametru.

Typ donucení je implicitní (automatický) převod proměnné na řetězec:

var myString = myVariable + "hello";

K nátlaku dochází, když pro provedení daného úkolu musí být proměnná převedena na řetězec – v tomto případě, když se proměnná spojuje s řetězcem (pomocí + operátor), bude automaticky převeden na řetězec, aby bylo možné jej připojit k „ahoj“.

Nucení je „funkce“ JavaScriptu, která není přítomna v mnoha jiných programovacích jazycích, takže někteří programátoři se rozhodnou použít explicitní konverzi, kdykoli je to možné, aby čtenáři objasnili, jak očekávají, že proměnná bude ošetřeno.

toString() Metody

Bez ohledu na to, zda dochází k explicitní nebo implicitní konverzi, toString() metoda proměnné je volána pro generování řetězcové reprezentace proměnné. Přímé volání funkce toString() metoda vypadá takto:

var myString - myVariable.toString();

V závislosti na typu proměnné toString() je zavoláno, očekává se jiné chování.

Vestavěné typy JavaScriptu

Vestavěné typy JavaScriptu (Number, Bigint, String, Object/Array, Boolean) mají všechny své vlastní toString() metody. Zde je návod, jak se každý chová.

Poznámka:null a nedefinované typy ne mít nějaké připojené metody.

Číselné proměnné (Number a BigInt)

Volání toString() metoda proměnné typu Number v JavaScriptu vrátí řetězec reprezentace čísla.

var myNumber = 6.5;
var myString = myNumber.toString(); // "6.5" - a string representation of the provided number

Volitelný radix mohou být dodány pro specifikaci základu pro použití při reprezentaci číselné hodnoty. Radix musí být mezi 236 .

var myNumber = 5;
var myString = myNumber.toString(2); // "101" - the string representation was generated using the supplied radix of 2

Schopnost dodat radix je možná pomocí explicitní nebo implicitní konverze typu a je dostupná pouze voláním toString() metoda číselné proměnné přímo.

Stejné chování platí pro typ proměnné BigInt.

Řetězce

Volání toString() metoda proměnné String dělá v podstatě to, co byste od ní očekávali – vrací kopii neupraveného původního řetězce.

var myString = "Hello!";
var myNewString = myString.toString(); // "Hello!"

Booleovské hodnoty

Booleovský objekt toString() metoda vrací buď „true“ nebo „false“ .

var myBoolean = false;
var myString = myBoolean.toString(); // "false"

Booleovské hodnoty mohou pouze mít hodnotu true nebo false.

Pole

toString() lze také použít k zobrazení řetězcové reprezentace polí JavaScriptu.

var myArray = ['dog', 'fish", 'cat'];
var myString = myArray.toString(); // "dog,fish,cat"

Výchozí chování pro toString() metoda v polích JavaScriptu je vrátit každý prvek ve vlastní řetězcové reprezentaci pole (jak je zajištěno voláním funkce toString() metoda každého prvku), oddělené čárkou.

Data

toString() metoda objektů Date vrátí informace o uložených datech a čase, včetně dne v týdnu, časového pásma a celého data/času v jediném řetězci.

var myDate = new Date();
var myString = myDate.toString(); // "Mon Feb 07 2022 20:56:24 GMT+1030 (Australian Central Daylight Time)"

Funkce

Funkce JavaScriptu jsou samy o sobě objekty a mají vlastní toString() metoda, která vrací řetězec obsahující úplný zdrojový kód funkce.

function sayHi(){
    console.log('Hi!');
}
var myString = sayHi.toString(); 
// "function sayHi(){
//    console.log('Hi!');
// }"

Vlastní objekty/třídy a přepsání toString()

Objekty JavaScript mají také toString() metoda. Bohužel její výchozí implementace není tak užitečná:

var myObject = {name:'bob'};
var myString = myObject.toString(); // "[object Object]"

Výše je deklarován obecný objekt a je to toString() metoda tzv. Jedinou informací obsaženou ve vygenerovaném řetězci je „[objekt objektu]“ – sděluje nám, že proměnná je objekt třídy Objekt . Není užitečné a toto je výchozí chování pro všechny objekty – objekt třídy Ovoce bude mít řetězcovou reprezentaci „[object Fruit]“ , například.

class Fruit {
    constructor(name) {
        this.name = name
    }
    toString() {
        return this.name;
    }
}

var myFruit = new Fruit('Apple');
var myString = myFruit.toString(); // "Apple"

Nad třídou JavaScriptu s názvem Ovoce je vytvořen, který přijímá jméno jako parametr. V prohlášení pro ovoce třída, toString() je definována metoda, která vrací atribut name ovoce. Toto toString() metoda přepíše výchozí.

Tedy namísto výchozího toString() metoda pro objekty Ovoce třída vrací „[object fruit]“ , se nazývá vlastní, které vrací název samotného ovoce (ve výše uvedeném případě „Jablko“ ).