Mbinu Zangu Bora – JavaScript
1. Zima cache
Firefox:
Fungua Developer Tools -> Fungua Mipangilio (F1) -> "Disable HTTP Cache (when toolbox is open)"
Chrome:
Fungua Developer Tools -> Fungua Mipangilio (F1) -> "Disable cache (while DevTools is open)"
2. Acha konsoli ya JS ikiwa wazi
Katika DevTools, fungua kichupo cha Console na ukiache wazi, ili hatua ya 1 iendelee kufanya kazi na pia uone hitilafu za mtandao na za JS.
Inapendekezwa pia programu-jalizi hii, inayoonyesha hitilafu za JS kwa uwazi zaidi pale unaposahau mwenyewe:
3. JavaScript: kitabu cha lazima “You Don't Know JS”
- You Don't Know JS (1st Edition)
- Kinaeleza kwa nini
thisinapaswa kuepukwa - Kinaeleza kwa nini katika JS wakati mwingine hutokea mambo yanayoonekana ya ajabu (maneno muhimu: lexical scope, closures)
4. Nukta-mkato
- Iweke kila mara
- Si lazima, lakini inaweza kusaidia, kwa mfano, kuepuka mtego huu: Stack Overflow
- JavaScript huweka nukta-mkato yenyewe:
// you want to return 5 and have ugly formatting:
return
5
// JavaScript Interpretation:
return;
5;
5. Viendeshaji vya kimantiki && na ||
- Katika Java,
a && bnaa || bhutathminiwa kulingana na aljebra ya Boole.anablazima ziwe thamani za boolean. - Katika JavaScript:
- Kwa
a && b,bhurudishwa ikiwaani true - Kwa
a || b,bhurudishwa ikiwaani false
- Kwa
Hata semi (expressions) zinaweza kuunganishwa hivi, na kuwezesha kauli fupi kuliko zote ya if – sukari ya sintaksia:
isAdmin && showDeleteButton();- (Kusema kweli, hii si kauli tena)
Mara nyingi hutumika pia kwa thamani za chaguo-msingi:
let sendNewsletter = form.getNewsletterOptIn() || false;
6. Je, JavaScript ni pass-by-reference au pass-by-value?
Katika JavaScript jambo hili linavutia. Mfano:
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);
Hutoa matokeo yafuatayo:
10
changed
unchanged
Kama obj1 isingekuwa rejea hata kidogo, kubadilisha obj1.item kusingekuwa na athari yoyote kwa obj1 nje ya function.
Kama hoja ingekuwa rejea halisi, kila kitu kingebadilika: num ingekuwa 100, na obj2.item ingekuwa na “changed”. Badala yake, num inabaki 10 na
obj2.item inabaki “unchanged”.
Kwa kweli, kipengele kinachopitishwa hupitishwa kwa thamani. Hata hivyo, kile kinachopitishwa kwa thamani chenyewe ni rejea. Kitaalamu hii huitwa call-by-sharing.
Kwa vitendo hii inamaanisha: ukibadilisha kigezo chenyewe (kama ilivyo kwa num na obj2), hilo halina athari kwa kitu asili kilichopitishwa kwenye function.
Lakini ukibadilisha thamani za ndani za kigezo, mabadiliko hayo yanabaki (kama ilivyo kwa obj1).