IPB

Witaj Gościu ( Zaloguj | Rejestruj )

JavaScript - teoria a praktyka, Czyli czemu mozna (nie) lubic JS
JavaScript - Twoje zdanie o nim
Czy lubisz jezyk JavaScript?
Tak! [ 7 ] ** [50.00%]
Nie, ale uzywam, bo jest popularny [ 5 ] ** [35.71%]
Nie, nie wykorzystuje go w swojej pracy [ 2 ] ** [14.29%]
Łącznie oddanych głosów: 14
Goście nie mogą głosować 
Michał Kilijanek
post 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?
Go to the top of the page
 
+Quote Post
 
Start new topic
Odpowiedzi
slawek22
post 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.
Go to the top of the page
 
+Quote Post

Posty w tym temacie


Reply to this topicStart new topic
2 użytkownik(ów) przegląda ten temat (2 gości i 0 anonimowych użytkowników)
0 Użytkownicy:

 



Wersja Lo-Fi Aktualny czas: 21.05.2012 - 16:31