JavaScript - teoria a praktyka, Czyli czemu mozna (nie) lubic JS |
JavaScript - teoria a praktyka, Czyli czemu mozna (nie) lubic JS |
16.07.2009 - 14:55
Post
#1
|
|
![]() Bywalec ![]() ![]() ![]() Grupa: Bywalec Postów: 100 Dołączył: 12.05.2009 Skąd: Przyłek / Warszawa Użytkownik nr: 509 |
Ostatnio zaczalem czesciej pisac cos na WWW, glownie pisalem desktopowe programiki. Znow musialem skorzystac odrobine z JS, ktorego nie lubie. Dlaczego? Powodow jest wiele:
1). Zmienne globalne 2). Widocznosc zmiennych wewnatrz obiektow 3). Inne rozbieznosci (zeby nie powiedziec 'absurdy'!) w stosunku do zalozen ECMA. Ogolnie nigdy nie jestem pewien jak zadziala napisany przeze mnie kod, wszystko robi sie 'na czuja' lub 'metoda prob i bledow'. Przyklad? Wg ECMA: false, null, "", '0' oznaczaja to samo, sa tak samo interpretowane, ale jak jest w praktyce? KOD false=='0' //zwraca false false==null //zwraca false null == "" //false null == '0' //false To nie jedyny problem z operatorem ==. Najwazniejsze ze jest on nieprzemienny (a raczej: nie zawsze przemiennosc zwraca ten sam wynik). Ostatnio w rece mi wpadla ksiazka: "JavaScript - Mocne strony", po jej lekturze postanowilem napisac o swoich odczuciach. Autor tej malej ksiazeczki zaleca uzywanie operatora ===, ktory jest obecny w standardzie JS i dziala poprawnie. Kolejna sprawa, to wartosci calkowitoliczbowe w JS. Takowych nie ma w tym jezyku. Sa za to wartosci zmiennoprzecinkowe, ktore sa poddawane konwersji do liczb calkowitych. Powoduje to spowolnienie wykonania skryptu, nawet o 50% (zalezy ile liczb calkowitych wykorzystuje kod skryptu - 50% to dla skryptu podstawowego kalkulatora i operacji na calkowitych liczbach). Oczywiscie 90% webmasterow uzywa tych "nieprawidlowych" elementow jezyka. Ech, dlatego wyczekuje czegos, co zastapi ten denerwujacy jezyk (o ktorym nadal mowi sie, ze jest w powijakach). A jaka jest wasza opinia na ten temat? |
|
|
|
![]() |
17.12.2009 - 22:26
Post
#2
|
|
|
Bywalec ![]() ![]() ![]() Grupa: Bywalec Postów: 101 Dołączył: 10.06.2009 Użytkownik nr: 557 |
CYTAT false=='0' W PHP i innych językach o dynamicznym typowaniu jest dokładnie tak samo. == sprawdza wartość a nie rodzaj typów. A reprezentacja wartości false to 0. Null i false to nie to samo. Z resztą jakiś dziwny masz interpreter JS jeśli false=='0' to false. CYTAT Powoduje to spowolnienie wykonania skryptu, nawet o 50% Używanie IE spowalnia wykonywanie skryptu o jakieś 20 000%. Więc język to tak na prawdę nie problem. CYTAT 1). Zmienne globalne To nie są zmienne globalne. Masz problemy z określeniem widoczności zmiennej i closures. To działa zupełnie inaczej niż w C++ i pochodnych. Jest to dużo lepsze rozwiązanie, po prostu trzeba zrozumieć że każdy blok kodu ma dostęp do każdej zmiennej rodzica. KOD function y() { var t=5; // <---------------- function g() { alert(t); // -------------> komunikat: 5 } g(); } y(); alert(t); // <------------ BŁĄD: undefined KOD var t = $$('.przycisk'); for (var i=0; i<t.length; i++) { t.onclick = function() {alert(i);} // <- wartość zmiennej zdefiniowana blok wyżej, czyli dla każdego przycisku wyświetli t.length } KOD var t = $$('.przycisk'); for (var i=0; i<t.length; i++) { function cls__(i) { t.onclick = function() {alert(i);} // <- poprawnie, wartość definiowana oddzielnie dla każdego wywołania pętli. } cls__(i); } To żadna filozofia trzeba trochę popisać. CYTAT 2). Widocznosc zmiennych wewnatrz obiektow Mylisz pojęcia - tak się definiuje zmienne i funkcje prywatne. Możesz mieć tylko dwa stany - albo zmienne są widoczne wewnątrz, albo widoczne wewnątrz i eksportowane na zewnątrz np. przez this. function objekt() { this.x = 10; // < składowa publiczna var y = 15; // < składowa prywatna this.d = function () .... // publiczna function h() // prywatna } JQuery jest okropnie toporne, spróbujcie mootools. Największy błąd to podejście do tego języka jak do C++ czy PHP. |
|
|
|
Michał Kilijanek JavaScript - teoria a praktyka 16.07.2009 - 14:55
Jan Koprowski JS zawsze wydawał mi się dziwny. Nie wiem dokładni... 16.07.2009 - 23:05
Michał Kilijanek CYTAT(Jan Koprowski @ ptk, 17 lip 2009 ... 18.07.2009 - 09:48
Marcin Czołnowski Dopóki nie usiadłem do jQuery to też miałem ten pr... 17.07.2009 - 02:56
Elroy Podobnie, jak przedmowca, korzystam z mozliwosci, ... 17.07.2009 - 08:14
pepkin88 Zmienne globalne Ci przeszkadzają? Korzystasz z ni... 17.12.2009 - 20:52![]() ![]() |
| Wersja Lo-Fi | Aktualny czas: 21.05.2012 - 16:31 |