Konwersja typów
Konwersja typów jest przeprowadzana automatycznie zawsze wtedy, kiedy zachodzi taka potrzeba. Odbywa się to poprzez wywołanie następujących operatorów konwersji (nie są częścią języka, a zostały zdefiniowane jedynie celu wsparcia semantyki):
- toPrimitive(PreferredType) - przekształca obiekt na typ pierwotny: Undefined, Null, Boolean, Number lub String. Jeżeli obiekt jest zdolny do przeprowadzenia konwersji więcej niż jednego typu pierwotnego (na podstawie jego wartości domyślnej - defaultValue), pod uwagę brany jest argument PreferredType (typ preferowany).
- toBoolean()
- Undefined =
false
- Null =
false
- Number
false
- dla +0
, -0
lub NaN
- w przeciwnym razie
true
- String
false
- dla pustego ciągu (długość równa zero)
- w przeciwnym razie
true
- Object =
true
- toNumber()
- Undefined =
NaN
- Null =
+0
- Boolean
1
- dla true
+0
- dla false
- String
- przekształcany według wzorców literałów typu Number po wcześniejszym usunięciu białych znaków z początku i końca ciągu (
"\u0009"
= "\t"
, "\u0020"
= " "
, "\u00A0"
, "\u000C"
= "\f"
, "\u000B"
= "\v"
, "\u000D"
= "\r"
, "\u2028"
, "\u2029"
i inne separatory Unicode z kategorii "Zs")
- w przeciwnym razie
NaN
- Object = wartość konwersji po wcześniejszym wywołaniu metody toPrimitive z typem preferowanym Number
- toInteger()
Algorytm działania:
- Wywołuje metodę toNumber
- Jeżeli rezultat jest
NaN
, zwraca +0
- Jeżeli rezultat jest:
+0
, -0
, +∞
, -∞
, to zwraca rezultat
- Zwraca:
sign(Rezultat) * floor(abs(Rezultat))
- toInt32() - konwertuje na jedną z 232 wartości całkowitych z zakresu od -232 do 231-1 włącznie
Algorytm działania:
- Wywołuje metodę toNumber
- Jeżeli rezultat jest
NaN
, zwraca +0
- Jeżeli rezultat jest:
+0
, -0
, +∞
, -∞
, to zwraca rezultat
- Oblicza:
Wynik = sign(Rezultat) * floor(abs(Rezultat))
- Oblicza:
Wynik %= 232
- Jeżeli
Wynik
jest większy lub równy 231 zwraca Wynik-232
; w przeciwnym razie zwraca Wynik
- toUint32() - konwertuje na jedną z 232 wartości całkowitych z zakresu od 0 do 232-1 włącznie
Algorytm działania:
- Wywołuje metodę toNumber
- Jeżeli rezultat jest
NaN
, zwraca +0
- Jeżeli rezultat jest:
+0
, -0
, +∞
, -∞
, to zwraca rezultat
- Oblicza:
Wynik = sign(Rezultat) * floor(abs(Rezultat))
- Zwraca:
Wynik %= 232
- toUint16() - konwertuje na jedną z 216 wartości całkowitych z zakresu od 0 do 216-1 włącznie
Algorytm działania:
- Wywołuje metodę toNumber
- Jeżeli rezultat jest
NaN
, zwraca +0
- Jeżeli rezultat jest:
+0
, -0
, +∞
, -∞
, to zwraca rezultat
- Oblicza:
Wynik = sign(Rezultat) * floor(abs(Rezultat))
- Zwraca:
Wynik %= 216
- toString()
- Undefined =
"undefined"
- Null =
"null"
- Boolean =
"true"
lub "false"
- Number
- Jeżeli liczba jest równa
NaN
, zwraca "NaN"
- Jeżeli liczba jest równa
+0
lub -0
, zwraca "0"
- Jeżeli liczba jest mniejsza od zera, zwraca konkatencję (połączenie) ciągów
"-"
i wyniku wywołania toString z dodatnią liczbą
- Jeżeli liczba jest równa nieskończoność, zwraca
"Infinity"
- W przeciwnym razie stosowane są przeliczenia opisane dalej w "Standard ECMA-262 3rd Edition" punkt 9.8.1 "ToString Applied to the Number Type"
- Object = wartość konwersji po wcześniejszym wywołaniu metody toPrimitive z typem preferowanym String
- toObject()
- Undefined - rzuca wyjątek
TypeError
- Null - rzuca wyjątek
TypeError
- Boolean - tworzy nowy obiekt Boolean z własnością logiczną value
- Number - tworzy nowy obiekt Number z własnością liczbową value
- String - tworzy nowy obiekt String z własnością tekstową value