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