Operatory w JavaScript często są niedoceniane, a okazuje się, że można zrobić z nimi całkiem dużo pożytecznych rzeczy.
Magia plusa!
Zapewne niemało z Was zastanawiało się kiedykolwiek, jak uzyskać datę w formacie UNIX. new Date() nijak nie ułatwia tego zadania. Z pomocą przychodzi „magiczny” plus:
alert(+new Date());
W ten sposób otrzymamy aktualną datę, np. 1236104305899.
Operator dodawania jest użyteczy nie tylko w powyższym przykładzie. Dwa znaki plusa obok siebie, w połączeniu ze stringiem, dają obiekt typu number:
alert(typeof "2"); // daje "string"
alert(typeof + + "2"); // daje "number"
Wykorzystać można to przy dodawaniu rzecz jasna:
var suma = 10 + + "10"
Warto podkreślić, że pomiędzy plusami jest znak spacji – inaczej wyjdzie nam inkrementacja.
Znak plusa potrafi również zmieniać typy logiczne na liczby:
alert(+true); // daje 1
alert(+false); // daje 0
Wykrzyknik Twoim domem
Można też uzyskać odwrotny efekt. Podwójny wykrzyknik najpierw konwertuje liczbę na typ logiczny:
alert(!!1); // daje true
Dla kontrastu zobaczmy, co dzieje się z !1:
alert(!1); // daje false
Siła tyldy
Postawiona tylda (operator bitowy!) przed liczbą n daje -(n+1). Na przykład:
alert(~1); // daje -2
alert(~2); // daje -3
alert(~-1); // daje 0
Szczególnie pomocne jest to przy okazji funkcji, które zwracają -1. Zamiast pisać:
if (returned === -1)
można użyć:
if (!~returned) // jeśli prawda, że zostało zwrócone -1 to...
Z kolei dwie tyldy ułatwiają zaokrąglanie liczb. Jest to najszybsza metoda – i składniowo, i jeśli chodzi o rzeczywisty czas wykonywania:
alert(~~2.5553434); // daje 2
To nie wszystko, co mozna zrobić z operatorami i maksymalnie spakowanym JSem (vide stara szkoła JS na pl.comp.lang.javascript). Wkrótce, o ile starczy mi czasu, postaram się opowiedzieć o innych sztuczkach.

Komentarze
Genialne! Często mam problemy z tymi zamianami typów… Dzięki!
Naprawdę ciekawe, ale strasznie nieczytelny kod powstaje.
Fajna sprawa, taki hmm cukier trochę, ale trzeba naprawdę przyzwyczaić się do używania tego.
No i inni mają problem z rozszyfrowaniem tej składni.
Niemniej jednak – warto znać :)
Doprawdy ciekawe, ale przy zmianie typu wolałbym zwykłe rzutowanie, jeśli tylko takie istnieje w JS. Zaokrąglanie i dodatkowe funkcje mało intuicyjne, ale można się tego nauczyć.
Rozumiem, że i pod IE wszystko ładnie działa? ;)
Gratuluję tak błyskawicznie napisanego, świetnego tekstu :) i powrotu do aktywnej części społeczności blogosfery.
cudownie chory język…
Tak, dziala w IE. To w koncu operatory, a wiec podstawowy element jezyka. Az nie wyobrazam sobie, gdyby to nie dzialalo w IE ;-)
Dzięki wielkie za tego posta, przydatne informacje!
Dlaczego używasz „+ +” zamiast pojedynczego plusa? Równie dobrze można używać „+ + + + +” i efekt będzie ten sam.
Pojedynczy plus doklei stringa do integera.
Przepraszam, nie uściśliłem – miałem na myśli fragment z typeof.
Podciagnalem to pod teze, wybacz ;-)
Mala poprawka: podwojny wykrzyknik tylko konwertuje liczbe na typ logiczny, bez zaprzeczania go.
pstryk. Drugi odnośnik w pracy mgr inż do Twojego bloga :) [pierwszy to falsy values].
Dzięki wielkie za bardzo unikalne treści! :)
drobna(?) uwaga dla większych liczb:
int32 = Math.pow(2,32)/2-1 //2147483647
~int32 // -2147483648
~(int32+1) // 2147483647 ???