Przejdź do treści

Obiekt globalny - JS

W tym rozdziale dowiesz się...

Do jakich elementów globalnych mamy dostęp w języku JavaScript?

  • JS
    NaN

    Po co wprowadzono w JavaScript wartość typu liczbowego, która jednak nie jest poprawną liczbą?

  • JS
    Infinity

    Jak w języku JavaScript zapisywana jest wartość nieskończona?

  • JS
    undefined

    Co zawiera zmienna, której nie przypisano żadnej wartości?

  • JS
    eval

    Jak napisać program, który pozwoli wykonać kod, wprowadzony przez użytkownika?

  • JS
    parseInt

    Co zrobić, żeby przekształcić wartość szesnastkową (heksadecymalną) lub ósemkową (oktalną) na liczbę dziesiętną?

  • JS
    parseFloat

    W jaki sposób przekształcić tekst na liczbę?

  • JS
    isNaN

    Jak sprawdzić, czy funkcja zwróciła prawidłową liczbę?

  • JS
    isFinite

    Jak sprawdzić, czy funkcja zwróciła liczbę skończoną?

  • JS
    decodeURI

    W jaki sposób zdekodować adres URI/URL?

  • JS
    decodeURIComponent

    W jaki sposób zdekodować wartość z adresu URI/URL?

  • JS
    encodeURI

    W jaki sposób zakodować tekst do postaci adresu URI/URL?

  • JS
    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 wynosi NaN

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 od Infinity

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
Facebook