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
[edytuj]Konwersja na typ String
[edytuj]Jak 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
[edytuj]Do 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
[edytuj]Konwersja na typ Boolean
[edytuj]Konwersja 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
[edytuj]Poznaliś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
[edytuj]Konwersja na typ Boolean
[edytuj]Podczas 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
[edytuj]Metoda 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
[edytuj]Dopeł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(){}" |