mozilla
Wyniki wyszukiwania

    Nowości w JavaScript 1.8

    UWAGA: Tłumaczenie tej strony nie zostało zakończone.
    Może być ona niekompletna lub wymagać korekty.
    Chcesz pomóc? | Dokończ tłumaczenie | Sprawdź ortografię | Więcej takich stron+.

    Obsługa języka JavaScript w wersji 1.8 ma zostać wprowadzona wraz z wydaniem silnika Gecko 1.9 (który ma się znaleźć w programie Firefox 3). Jest to aktualizacja mniej znacząca niż JavaScript 1.7; zmiany odpowiadają modyfikacjom dokonanym ostatnio w języku ECMAScript 4/JavaScript 2. W tym wydaniu zawarte będą wszystkie nowe funkcje wprowadzone w wydaniach JavaScript 1.6 i JavaScript 1.7.

    Aby zapoznać się z postępem prac nad rozwojem obsługi języka JavaScript w wersji 1.8, zobacz błąd 380236.

    Korzystanie z języka JavaScript 1.8

    Aby skorzystać z nowych własności języka JavaScript 1.8 w kodzie HTML, należy użyć następującego kodu:

     <script type="application/javascript;version=1.8"> ... twój kod ... </script>
    

    W przypadku korzystania z powłoki JavaScript, komponentów XPCOM języka JavaScript lub elementów <script> w języku XUL automatycznie używana jest najnowsza wersja JS (JS1.8 w Mozilli 1.9); patrz błąd 381031 i błąd 385159.

    W przypadku korzystania z funkcji, w których wymagane jest użycie nowych słów kluczowych yield i let, należy określić, że używana ma być wersja języka 1.7 lub nowsza — w istniejącym kodzie te słowa kluczowe mogą być bowiem nazwami zmiennych lub funkcji. Funkcje, w których nie wprowadzono nowych słów kluczowych (takie jak wyrażenia generatorów), mogą być używane bez określania wersji języka JavaScript.

    Domknięcia wyrażeń

    Ta nowość to nic innego jak skrót do pisania prostych funkcji, dodający do języka konstrukcję podobną do notacji lambda.

    JavaScript 1.7 i starsze:

     function(x) { return x * x; }
    

    JavaScript 1.8:

     function(x) x * x
    

    Taka składnia pozwala pominąć nawiasy i wyrażenie return - są one dodawane automatycznie. Nie ma żadnej dodanej wartości w pisaniu z wykorzystaniem tej notacji, poza tym, że sam kod staje się krótszy.

    Przykłady:

    Skrót do podpinania nasłuchiwania zdarzeń:

     document.addEventListener("click", function() false, true);
    

    Użycie nowej notacji w połączeniu z niektórymi funkcjami tablic z JavaScript 1.6:

     elems.some(function(elem) elem.type == "text");
    

    Wyrażenia generatorów

    Ten dodatek pozwala na proste tworzenie generatorów (które opisano w JavaScript 1.7). Wcześniej konieczne byłoby stworzenie własnej funkcji zawierającej w sobie wyrażenie yield, jednak ten dodatek pozwala na użycie składni podobnej do wyrażenia tablicowego/listowego (ang. array/list comprehension) do stworzenia identycznego wyrażenia generatora.

    Wykorzystując JavaScript 1.7 w celu stworzenia własnego generatora obiektu kod wyglądać mógłby następująco:

     function add3(obj) {
    
       for ( let i in obj )
         yield i + 3;
     }
     
     let it = add3(someObj);
     try {
       while (true) {
         document.write(it.next() + "<br>\n");
       }
     } catch (err if err instanceof StopIteration) {
       document.write("End of record.<br>\n");
     }
    

    W JavaScript 1.8 można pominąć tworzenie własnej funkcji generatora wykorzystując w zamian następujące wyrażenie generatora:

     let it = (i + 3 for (i in someObj));
     try {
       while (true) {
         document.write(it.next() + "<br>\n");
       }
     } catch (err if err instanceof StopIteration) {
       document.write("End of record.<br>\n");
     }
    

    Wyrażenia generatora mogą być także przesłane do funkcji jako wartości. To rozwiązanie jest szczególnie warte uwagi odkąd generatory uruchamiane są wyłącznie gdy są kategorycznie potrzebne (w przeciwieństwie do typowych sytuacji wykorzystujących wyobrażenie tablicy, gdzie tablice tworzone są wcześniej). Przykład pokazujący różnice w tych rozwiązaniach znaleźć można poniżej:

    Wykorzystując JavaScript 1.7 Wyrażenie Tablicowe

     handleResults([ i for ( i in obj ) if ( i > 3 ) ]);
     
     function handleResults( results ) {
       for ( let i in results )
         // ...
     }
    

    Wykorzystując JavaScript 1.8 Wyrażenia Generatora

     handleResults( i for ( i in obj ) if ( i > 3 ) );
     
     function handleResults( results ) {
       for ( let i in results )
         // ...
     }
    

    Znaczącą różnicą pomiędzy tymi dwoma przykładami jest to, iż dla wyrażeń generatora konieczne jest wykonanie pętli dla struktury 'obj' tylko raz, podczas gdy dla Wyrażenia Tablicowego konieczne jest wykonanie pętli raz w celu stworzenia wyobrażenia tablicy oraz drugi raz podczas iteracji po jej elementach.

    Dodatkowe zmiany w obiekcie Array

    W języku JavaScript 1.8 dostępne są dwie nowe metody iteracyjne obiektu Array:

    • reduce() - wywołuje funkcję dla każdego elementu z tablicy i zachowuje wyniki z poprzednich wywołań.
    • reduceRight() - wywołuje funkcję dla każdego elementu z tablicy i zachowuje wyniki z poprzednich wywołań, lecz w odwrotnej kolejności.

    Zmiany z usuwaniem elementów tablicy w pętli for..in

    TBD: mention Nowości w JavaScript 1.7#Iterowanie przez obiekty (błąd 366941).


    Nadchodzące zmiany

    Zmiany w JavaScript 1.8 włączają również:

    • Kodowanie i dekodowanie danych w JSON.
    • Składnia funkcji Slice.
    • Generalized destructuring for...in (czy znaczy to coś innego niż #Changes in destructuring for..in ? --Nickolay 10:52, 9 Wrzesień 2007 (PDT))

    Autorzy i etykiety dokumentu

    Contributors to this page: Flaneur, mi5tic, Armanis, Toni555, Rokuzo, Bedi, teoli, ethertank, gandalf, ChrisR, Mgjbot, Mefiu
    Ostatnia aktualizacja: teoli,