Obiekt globalny - JS
W tym rozdziale dowiesz się...
Do jakich elementów globalnych mamy dostęp w języku JavaScript?
- NaN
Po co wprowadzono w JavaScript wartość typu liczbowego, która jednak nie jest poprawną liczbą?
- Infinity
Jak w języku JavaScript zapisywana jest wartość nieskończona?
- undefined
Co zawiera zmienna, której nie przypisano żadnej wartości?
- eval
Jak napisać program, który pozwoli wykonać kod, wprowadzony przez użytkownika?
- parseInt
Co zrobić, żeby przekształcić wartość szesnastkową (heksadecymalną) lub ósemkową (oktalną) na liczbę dziesiętną?
- parseFloat
W jaki sposób przekształcić tekst na liczbę?
- isNaN
Jak sprawdzić, czy funkcja zwróciła prawidłową liczbę?
- isFinite
Jak sprawdzić, czy funkcja zwróciła liczbę skończoną?
- decodeURI
W jaki sposób zdekodować adres URI/URL?
- decodeURIComponent
W jaki sposób zdekodować wartość z adresu URI/URL?
- encodeURI
W jaki sposób zakodować tekst do postaci adresu URI/URL?
- encodeURIComponent
W jaki sposób zakodować tekst, tak aby można go było wstawić do adresu URI/URL?
NaN
Po co wprowadzono w JavaScript wartość typu liczbowego, która jednak nie jest poprawną liczbą?
NaN
- Wartość:
Number
- wartość typu liczbowego która nie jest liczbą
Wiele funkcji, które normalnie powinny zwrócić wartość typu Number
, może w pewnych przypadkach zwrócić specjalną wartość NaN
(ang. not-a-number). Wskazuje to najczęściej, że do funkcji zostały przekazane niepoprawne parametry i w związku z tym nie może ona zwrócić wartości liczbowej. NaN oznacza dosłownie: nie-liczba.
NaN porównana do dowolnej innej wartości - w tym nawet do NaN - zawsze zwraca false. Dlatego aby sprawdzić, czy wartość wynosi NaN
, należy użyć funkcji isNaN.
Przykład NaN
NaN == 1; // false NaN == 0; // false NaN == false; // false NaN == null; // false NaN == NaN; // false NaN === NaN; // false NaN == Infinity; // false NaN == undefined; // false
Infinity
Jak w języku JavaScript zapisywana jest wartość nieskończona?
Infinity
- Wartość:
Number
- nieskończoność
Wiele funkcji, które normalnie powinny zwrócić wartość typu Number
, może w pewnych przypadkach zwrócić specjalną wartość Infinity
. Wskazuje to najczęściej, że do funkcji zostały przekazane takie parametry, że obliczona wartość jest nieskończona.
Infinity zachowuje się jak matematyczna nieskończoność. Jest ona większa od każdej liczby. Dowolna liczba pomnożona przez Infinity daje również Infinity. Natomiast jeżeli podzielimy dowolną liczbę przez Infinity, zawsze otrzymamy wartość zero.
Przykład Infinity
Infinity > 1; // true -Infinity < 0; // true 1 * Infinity; // Infinity -1 * Infinity; // -Infinity 1 / Infinity; // 0
undefined
Co zawiera zmienna, której nie przypisano żadnej wartości?
undefined
- Wartość:
Undefined
- wartość niezdefiniowana
Oznacza, że do zmiennej nie została przypisana żadna wartość.
Przykład undefined
var x; x == undefined; // true x = 1; x == undefined; // false function f(a) { return a == undefined; } f(); // true f(1); // false
eval
Jak napisać program, który pozwoli wykonać kod, wprowadzony przez użytkownika?
eval(x)
- Parametry:
- x - kod programu do natychmiastowego wykonania
- Wartość:
- wartość wyrażenia wykonanego kodu
- x - jeżeli przekazany parametr nie jest prostym tekstem
- Wyjątki:
SyntaxError
- jeżeli kod do wykonania zawiera błąd składni
Funkcja pozwala dynamicznie wykonać dowolny kod ECMAScript już po uruchomieniu programu. Możemy np. utworzyć program, który pozwala użytkownikowi wprowadzać wyrażenia, a następnie prezentować mu ich wynik. Możemy również pobrać kod z zewnętrznego źródła, który następnie zostanie wykonany przez nasz program.
Używanie funkcji eval
jest mało wydajnym sposobem uruchamiania kodu. Ponadto może być niebezpieczne dla aplikacji, ponieważ kod pobrany z zewnętrznego źródła - w tym od użytkownika - może zawierać złośliwe fragmenty, które negatywnie wpłyną na działanie aplikacji lub wykradną z niej jakieś sekretne dane.
Przykład eval
eval("2 + 2"); // 4 eval(1); // 1 var x = true; function f(a) { return a + '!'; } eval("if (x) f('ok'); else f('error');"); // 'ok!' eval('('); // SyntaxError eval('return 1'); // SyntaxError
Zwracam uwagę, że wywołanie konstruktora new String(...) zwraca obiekt, a nie prosty tekst. Zatem nie zostanie on wykonany przez funkcję eval
, lecz zwrócony w niezmienionej formie:
eval(new String("2 + 2")); // new String("2 + 2")
parseInt
Co zrobić, żeby przekształcić wartość szesnastkową (heksadecymalną) lub ósemkową (oktalną) na liczbę dziesiętną?
parseInt(string) parseInt(string, radix)
- Parametry:
String
string - tekst, który ma zostać przekształcony na liczbę całkowitąNumber
radix - podstawa systemu liczbowego (2 - 36), zgodnie z którym wykonać przekształcenie (domyślnie: 16 - gdy string zaczyna się od "0x" lub "0X", a w przeciwnym razie - 10)- Wartość:
Number
- liczba całkowita albo NaN (gdy nie udało się wykonać przekształcenia)
Pozwala przekształcić podany tekst na liczbę całkowitą. O tym, w jakim systemie jest zapisana liczba, decyduje podstawa systemu liczbowego. Na przykład w systemie heksadecymalnym (szesnastkowym) mamy do dyspozycji 16 cyfr: cyfry arabskie 0-9 i litery A-F (wielkość znaków nie ma znaczenia). Literze A odpowiada wartość 10, B - 11 itd. Innym popularnym systemem liczbowym jest system oktalny (ósemkowy) - podstawa 8. Natomiast na co dzień posługujemy się systemem decymalnym (dziesiętnym) - podstawa 10.
Białe znaki na początku tekstu są pomijane. Jeżeli funkcja napotka w przekształcanym tekście znak, który jest niepoprawnym zapisem w podanym systemie liczbowym, ignoruje go oraz wszystkie znaki, które znajdują się za nim. Warty podkreślenia jest również fakt, że funkcja nie wykonuje zaokrągleń liczb rzeczywistych, lecz po prostu obcina wartość po przecinku.
Aby wykonć przekształcenie w drugą stronę, użyj funkcji Number.prototype.toString.
Aby sprawdzić, czy funkcja nie zwróciła przypadkiem niepoprawnego wyniku, użyj funkcji isNaN.
Przykład parseInt
parseInt(" +1A "); // 1 parseInt("1.9"); // 1 parseInt("-1.1"); // -1 parseInt("1A", 8); // 1 parseInt("10", 8); // 8 parseInt("0x1A"); // 26 parseInt("1a", 16); // 26 parseInt("test"); // NaN parseInt(0, 0); // 0 == parseInt(0, 10) parseInt(0, 1); // NaN parseInt(0, 37); // NaN
parseFloat
W jaki sposób przekształcić tekst na liczbę?
parseFloat(string)
- Parametry:
String
string - tekst, który ma zostać przekształcony na liczbę rzeczywistą- Wartość:
Number
- liczba rzeczywista albo NaN (gdy nie udało się wykonać przekształcenia)
Pozwala przekształcić podany tekst na liczbę rzeczywistą.
Białe znaki na początku tekstu są pomijane. Jeżeli funkcja napotka w przekształcanym tekście znak, który jest niepoprawnym zapisem liczby rzeczywistej, ignoruje go oraz wszystkie znaki, które znajdują się za nim.
Różnica pomiędzy parseFloat(...)
a funkcją Number(...) jest taka, że pierwsza z nich na końcu tekstu ignoruje wszystkie znaki niebędące poprawnym zapisem liczbowym, a druga - tylko białe znaki.
Aby sprawdzić, czy funkcja nie zwróciła przypadkiem niepoprawnego wyniku, użyj funkcji isNaN.
Przykład parseFloat
parseFloat(" +1A "); // 1 parseFloat("1.9"); // 1.9 parseFloat("-1.1"); // -1.1 parseFloat("314e-2"); // 3.14 parseFloat("0.0314E+2"); // 3.14 parseFloat("0x1A"); // 0 parseFloat("test"); // NaN
isNaN
Jak sprawdzić, czy funkcja zwróciła prawidłową liczbę?
isNaN(number)
- Parametry:
Number
number - sprawdzana liczba- Wartość:
Boolean
- czy wartość number wynosiNaN
Wiele funkcji, które normalnie powinny zwrócić wartość typu Number
, może w pewnych przypadkach zwrócić specjalną wartość NaN
(ang. not-a-number). Wskazuje to najczęściej, że do funkcji zostały przekazane niepoprawne parametry i w związku z tym nie może ona zwrócić wartości liczbowej.
Ponieważ NaN
porównana do dowolnej innej wartości - w tym nawet do NaN
- zawsze zwraca false
, jedynym pewnym sposobem sprawdzenia, czy funkcja zwróciła poprawną liczbę, jest wywołanie funkcji isNaN
.
Przykład isNaN
isNaN(parseInt("1")); // false isNaN(parseInt("test")); // true
isFinite
Jak sprawdzić, czy funkcja zwróciła liczbę skończoną?
isFinite(number)
- Parametry:
Number
number - sprawdzana liczba- Wartość:
Boolean
- czy wartość number jest różna odInfinity
Wiele funkcji, które normalnie powinny zwrócić wartość typu Number
, może w pewnych przypadkach zwrócić specjalną wartość Infinity
. Wskazuje to najczęściej, że do funkcji zostały przekazane takie parametry, że obliczona wartość jest nieskończona.
Aby sprawdzić, czy wskazana wartość jest skończona, należy użyć funkcji isFinite
.
Przykład isFinite
isFinite(Infinity); // false isFinite(-Infinity); // false isFinite(1); // true isFinite(1 / 0); // false
decodeURI
W jaki sposób zdekodować adres URI/URL?
decodeURI(encodedURI)
- Parametry:
String
encodedURI - tekst do zdekodowania- Wartość:
String
- zdekodowana wartość adresu URI- Wyjątki:
URIError
- podany tekst nie jest poprawnym adresem URI
Dekoduje pełny adres URI korzystając z sekwencji ucieczki UTF-8.
Przykład decodeURI
decodeURI("http://example.com/%7Btest%7D"); // "http://example.com/{test}" decodeURI("%XX"); // URIError
decodeURIComponent
W jaki sposób zdekodować wartość z adresu URI/URL?
decodeURIComponent(encodedURIComponent)
- Parametry:
String
encodedURIComponent - tekst do zdekodowania- Wartość:
String
- zdekodowana wartość komponentu adresu URI- Wyjątki:
URIError
- podany tekst nie jest poprawnym komponentem adresu URI
Dekoduje komponent (cześć) adresu URI korzystając z sekwencji ucieczki UTF-8.
Przykład decodeURIComponent
decodeURIComponent("%7Btest%7D"); // "{test}" decodeURIComponent("%XX"); // URIError
encodeURI
W jaki sposób zakodować tekst do postaci adresu URI/URL?
encodeURI(uri)
- Parametry:
String
uri - tekst do zakodowania- Wartość:
String
- zakodowana wartość adresu URI- Wyjątki:
URIError
- podany tekst nie jest poprawnym adresem URI
Koduje pełny adres URI, korzystając z sekwencji ucieczki UTF-8. Zastępuje znaki specjalne kodami w postaci %XX (gdzie XX to heksadecymalna wartość bajtu). Nie są kodowane:
- separatory URI (: / ; ?)
- znaki zarezerwowane w składni URI, jeśli znajdują się na właściwych miejscach w adresie (@ & = + $ ,)
- znak: # (jeśli znajduje się na właściwym miejscu w adresie)
- litery łacińskie - małe i wielkie (a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) cyfry dziesiętne (0 1 2 3 4 5 6 7 8 9)
- znaki: - _ . ! ~ * ' ( )
Przykład encodeURI
encodeURI("http://example.com/{test}"); // "http://example.com/%7Btest%7D" encodeURI("\uDC00"); // URIError
encodeURIComponent
W jaki sposób zakodować tekst, tak aby można go było wstawić do adresu URI/URL?
encodeURIComponent(uriComponent)
- Parametry:
String
uriComponent - tekst do zakodowania- Wartość:
String
- zakodowana wartość komponentu adresu URI- Wyjątki:
URIError
- podany tekst nie jest poprawnym komponentem adresu URI
Koduje komponent (część) adresu URI, korzystając z sekwencji ucieczki UTF-8. Zastępuje znaki specjalne kodami w postaci %XX (gdzie XX to heksadecymalna wartość bajtu). Nie są kodowane:
- litery łacińskie - małe i wielkie (a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
- cyfry dziesiętne (0 1 2 3 4 5 6 7 8 9)
- znaki: - _ . ! ~ * ' ( )
Przykład encodeURIComponent
encodeURIComponent("{test}"); // "%7Btest%7D" encodeURIComponent("\uDC00"); // URIError