JavaScript/Konwersje typów prostych
Z Wikibooks, biblioteki wolnych podręczników.
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.
Spis treści |
[edytuj] Konwersja typu Boolean na inne typy
[edytuj] Konwersja na typ String
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.
[edytuj] Konwersja na typ Number
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
[edytuj] Konwersja typu String na inne typy
[edytuj] Konwersja na typ Boolean
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 jago fałsz i przyjmuje wartość false.
[edytuj] Konwersja na typ Number
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);//*wartość 250 - "fa" zamieniono na liczbę!
[edytuj] Konwersja typu Number na inne typy
[edytuj] Konwersja na typ Boolean
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.
[edytuj] Konwersja na typ String
Metoda toString() dla typu Number domyślnie konwertuje liczbę dziesiętną na łańcuch znaków, nie zależ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ównierz 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
[edytuj] Rzutowanie typów
Dopełnieniem konwersji jednych typów prostych na inne jest rzutowanie:
[edytuj] Rzutowanie na typ Boolean
- 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 |
[edytuj] Rzutowanie na typ Number
- 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 |
[edytuj] Rzutowanie na typ String
- 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(){}" |