JavaScript/Konwersje typów prostych
Instancje typów prostych dziedziczą ze swych prototypów własności i metody. Oznacza, to że oprócz przechowywania wartości, którą im przypisaliśmy, posiadają wbudowane metody operacji na nich.
Konwersja typu Boolean na inne typy
edytujKonwersja na typ String
edytujJak już dowiedzieliśmy się z poprzedniego rozdziału, typ Boolean dysponuje dwoma literałami. Aby skonwertować jeden z tych literałów na typ String, można posłużyć się metodą toString() występującą w typie Boolean:
var prawda=true;
alert(typeof prawda); //wyświetla boolean
var lancuch=prawda.toString();
alert(typeof(lancuch)); //wyświetla string
alert(lancuch); //wyświetla true
alert(prawda); //wyświetla true
Jak można zauważyć w ostatniej linijce wyświetlona została wartość "true". Spowodowane to jest automatyczną konwersją na typ String typów prostych.
Konwersja na typ Number
edytujDo konwersji na typ Number służą dwie globalne metody:
- parseInt( wartość ) - zamieniana jest "wartość" na liczbę całkowitą.
- parseFloat( wartość ) - zamieniana jest "wartość" na liczbę zmiennoprzecinkową.
Spróbujmy wykorzystać nasze nowe metody na typie Boolean:
var falsz=false;
var liczba=parseInt(falsz);
var liczba_float=parseFloat(falsz);
alert(typeof liczba); //wyświetla number
alert(typeof liczba_float); //wyświetla number
alert(liczba); // ups... wyświetlone jest NaN
alert(liczba_float); // tak jak wyżej także wyświetlone jest NaN
Jak zauważyliśmy (lub też nie udało nam się zauważyć) nastąpiła podwójna konwersja:
- Typ Boolean został skonwertowany na typ String.
- Typ String został skonwertowany na typ Number.
O tym, jak jest konwertowany typ String, niżej.
Została nam jeszcze jedna możliwość: rzutowanie typów.
var prawda=true;
var liczba=Number(prawda); //rzutujemy typ
alert(typeof(liczba)); //wyświetla number
alert(liczba); //Sukces wyświetla 1
Konwersja typu String na inne typy
edytujKonwersja na typ Boolean
edytujKonwersja na typ Boolean w wyrażeniach operatorowych jest wykonywana automatycznie i nie istnieje oficjalna metoda do konwersji na typ Boolean.
Aby otrzymać typ Boolean musimy (tak jak wyżej) użyć rzutowania na typ Boolean:
var lancuch="false";
var lancuch2="";
var prawda=Boolean(lancuch); //rzutujemy typ
var falsz=Boolean(lancuch2); //rzutujemy typ
alert(typeof prawda); //wyświetla boolean
alert(prawda); //wyświetla true
alert(falsz); //wyświetla false
Jak zdążyliśmy zauważyć:
- Każdy niepusty łańcuch znaków jest traktowany jako prawda i przyjmuje wartość true.
- Pusty łańcuch znaków traktowany jest jako fałsz i przyjmuje wartość false.
Konwersja na typ Number
edytujPoznaliśmy wyżej dwie metody do konwertowania innych typów na liczbę: parseInt() oraz parseFloat(). Przypatrzmy się im bliżej:
var lancuch1 = "3.14";
var lancuch2 = "50";
var liczba1 = parseInt(lancuch1);
var liczba2 = parseInt(lancuch2);
var liczba3 = parseFloat(lancuch1);
alert(liczba1); //Wyświetla 3
alert(liczba2); //Wyświetla 50
alert(liczba3); //Wyświetla 3.14
Jak zauważyliśmy, parseInt() zaokrągla liczby zmiennopozycyjne. To jeszcze nie wszystkie możliwości parseInt(), gdyż może przyjmować jeszcze drugą wartość:
- parseInt( wartość , podstawa ) - konwertuje liczbę "wartość" o podanej podstawie "podstawa" do całkowitej liczby dziesiętnej.
var lancuch = "1010101";
var lancuch2 = "303";
var lancuch3 = "FF";
var liczba1 = parseInt(lancuch); //wartość 1010101
var liczba2 = parseInt(lancuch,2); //wartość 85
var liczba3 = parseInt(lancuch2,2); //wartość NaN
var liczba4 = parseInt(lancuch2,8); //wartość 195
var liczba5 = parseInt(lancuch2,16); //wartość 771
var liczba6 = parseInt(lancuch3,10); //wartość NaN
var liczba7 = parseInt(lancuch3,16); //wartość 255
Gdy konwertujemy liczbę z innego typu, bacznie zwracajmy uwagę na wartość i podstawę. |
Ostatnia rzecz związana z metodami parseInt() i parseFloat(), w przypadku mieszanych łańcuchów z liczbami, brana pod uwagę jest wartość od początku łańcucha do spotkanej pierwszej niedozwolonej wartości:
var lancuch = "FF - Firefox";
var falsz = false;
var liczba1 = parseInt(lancuch); //wartość NaN
var liczba2 = parseInt(falsz); //Tak jak wcześniej NaN
var liczba3 = parseInt(lancuch,16); //wartość 255
var liczba4 = parseInt(falsz,16); // Początkowe litery "fa" zamieniono na liczbę 250!
Konwersja typu Number na inne typy
edytujKonwersja na typ Boolean
edytujPodczas konwersji z Number na Boolean musimy także skorzystać z rzutowania na typ Boolean:
var liczba1 = 12;
var liczba2 = 0;
var liczba3 = -12.1;
var prawda = Boolean(liczba1); //wartość true
var falsz = Boolean(liczba2); //wartość false
var prawda2 = Boolean(liczba3); //wartość true
- Wartość liczby równej 0 konwertowana jest na false.
- Wartość liczby różna od zera konwertowana jest na true.
Konwersja na typ String
edytujMetoda toString() dla typu Number domyślnie konwertuje liczbę dziesiętną na łańcuch znaków, niezależnie od podstawy wcześniej wprowadzonej liczby.
var lancuch="10101";
var liczba = parseInt(lancuch,2);
alert(typeof liczba.toString()); //wyświetla string
var lancuch2=liczba.toString();
alert(lancuch2); //wyświetla 21
Metoda toString może również konwertować liczbę dziesiętną na liczbę o innej podstawie:
var liczba=255;
alert(liczba.toString(2)); //wyświetla 11111111
alert(liczba.toString(4)); //wyświetla 3333
alert(liczba.toString(8)); //wyświetla 377
alert(liczba.toString(16)); //wyświetla ff
Rzutowanie typów
edytujDopełnieniem konwersji jednych typów prostych na inne jest rzutowanie:
Rzutowanie na typ Boolean
edytuj- Boolean( wartość ) - rzutuje "wartość" na typ Boolean (jeśli rzutowanie z Boolean, to otrzymamy ten sam literał).
Opis wartości | Przykład wartości | Wartość otrzymywana |
---|---|---|
Pusty łańcuch znaków | "" | false |
Niepusty łańcuch znaków | "witaj świecie" | true |
Zero | 0 | false |
Liczba niezerowa | 255 | true |
Wartość pusta | null | false |
Wartość niezdefiniowana | undefined | false |
Nowy obiekt | new Object() | true |
Definicja funkcji | function f(){} | true |
Rzutowanie na typ Number
edytuj- Number( wartość ) - rzutuje "wartość" na typ Number (jeśli rzutowanie z Number, to otrzymamy tą samą wartość).
Opis wartości | Przykład wartości | Wartość otrzymywana |
---|---|---|
Wartość logiczna fałsz | false | 0 |
Wartość logiczna prawda | true | 1 |
Wartość pusta | null | 0 |
Wartość niezdefiniowana | undefined | NaN |
Ciąg znaków liczby całkowitej | "255" | 255 |
Ciąg znaków źle wprowadzonej liczby | "123ala" | NaN |
Ciąg znaków liczby zmiennoprzecinkowej | "3.14" | 3.14 |
Ciąg znaków źle wprowadzonej liczby zmiennoprzecinkowej | "3.14.1" | NaN |
Nowy obiekt | new Object() | NaN |
Definicja funkcji | function f(){} | NaN |
Rzutowanie na typ String
edytuj- String( wartość ) - rzutuje "wartość" na typ String (jeśli rzutowanie ze String, to otrzymamy ten sam łańcuch znaków).
Opis wartości | Przykład wartości | Wartość otrzymywana |
---|---|---|
Wartość logiczna fałsz | false | "false" |
Wartość logiczna prawda | true | "true" |
Liczba całkowita | 255 | "255" |
Liczba zmiennoprzecinkowa | 3.14 | "3.14" |
Wartość pusta | null | "null" |
Wartość niezdefiniowana | undefined | "undefined" |
Nowy obiekt | new Object() | tablica asocjacyjna [object Object] Z uwagi na kod natywny nie są wyświetlane właściwości Object() |
Definicja funkcji | function f(){} | "function f(){}" |