Bunele mele practici – JavaScript

1. Dezactivează cache-ul

Firefox:
Deschide Developer Tools -> deschide setările (F1) -> "Disable HTTP Cache (when toolbox is open)"

Chrome:
Deschide Developer Tools -> deschide setările (F1) -> "Disable cache (while DevTools is open)"

2. Ține consola JS deschisă

În Dev Tools, deschide tabul Console și lasă-l deschis, ca pasul 1 să rămână activ și ca, în plus, să observi erorile de rețea și de JS.

Recomandat este și acest plugin, care afișează erorile JS și mai bine, pentru momentele în care uiți chiar tu de consolă:

3. JavaScript: lectură obligatorie „You Don't Know JS”

4. Punctul și virgula

// you want to return 5 and have ugly formatting:
return
5

// JavaScript Interpretation:
return;
5;

5. Operatorii logici && și ||

Și expresiile pot fi legate astfel, ceea ce permite cel mai scurt if-statement posibil – syntactic sugar:

Se folosește des și pentru valori implicite:

6. JavaScript este pass-by-reference sau pass-by-value?

În JavaScript, lucrurile sunt interesante. Exemplu:

function changeStuff(a, b, c) {
    a = a * 10;
    b.item = "changed";
    c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

Produce următorul output:

10
changed
unchanged

Dacă obj1 nu ar fi deloc o referință, atunci modificarea lui obj1.item nu ar avea niciun efect asupra lui obj1 din afara funcției.

Dacă argumentul ar fi o referință adevărată, atunci totul s-ar schimba: num ar fi 100, iar obj2.item ar conține „changed”. În schimb, num rămâne 10, iar obj2.item rămâne „unchanged”.

De fapt, elementul transmis este transmis prin valoare. Numai că ceea ce se transmite prin valoare este, la rândul său, o referință. Tehnic, acest lucru se numește call-by-sharing.

În practică, asta înseamnă: dacă modifici parametrul însuși (ca la num și obj2), nu are niciun efect asupra obiectului original transmis funcției. Dacă însă modifici valorile interne ale parametrului, aceste modificări se păstrează (ca la obj1).