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

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(){}"