माझ्या Best Practices – JavaScript
1. Cache बंद करा
Firefox:
Developer Tools उघडा -> Settings उघडा (F1) -> "Disable HTTP Cache (when toolbox is open)"
Chrome:
Developer Tools उघडा -> Settings उघडा (F1) -> "Disable cache (while DevTools is open)"
2. JS console उघडा ठेवा
Dev Tools मध्ये Console टॅब उघडा आणि तो उघडाच ठेवा, म्हणजे पहिली पायरी लागू राहील आणि network व JS मधील errors सुद्धा तुमच्या लक्षात येतील.
हे plugin सुद्धा उपयुक्त आहे, जे JS errors आणखी चांगल्या प्रकारे दाखवते – तुम्ही स्वतः कधी पाहायला विसरलात तर:
3. JavaScript: आवर्जून वाचा – “You Don't Know JS”
- You Don't Know JS (1st Edition)
thisका टाळावा, हे समजावून सांगते- JS मध्ये कधी कधी विचित्र वाटणाऱ्या गोष्टी का घडतात, हे समजावून सांगते (मुख्य शब्द: lexical scope, closures)
4. सेमीकोलन
- नेहमी लावा
- ते अनिवार्य नाही, पण उदाहरणार्थ हा सापळा टाळायला मदत करू शकते: Stack Overflow
- JavaScript आपोआप सेमीकोलन लावते:
// you want to return 5 and have ugly formatting:
return
5
// JavaScript Interpretation:
return;
5;
5. Logical operators && आणि ||
- Java मध्ये
a && bआणिa || bBoolean algebra नुसार evaluate होतात.aआणिbbooleans असणे आवश्यक आहे. - JavaScript मध्ये:
a && bमध्ये,atrue असेल तरbreturn होतोa || bमध्ये,afalse असेल तरbreturn होतो
Expressions सुद्धा अशा प्रकारे जोडता येतात आणि त्यातून आजवरचे सर्वात छोटे if-statement तयार होते – syntax sugar:
isAdmin && showDeleteButton();- (काटेकोरपणे पाहिले तर हे आता statement राहिलेले नाही)
Default values साठीही याचा वापर अनेकदा केला जातो:
let sendNewsletter = form.getNewsletterOptIn() || false;
6. JavaScript pass-by-reference आहे की pass-by-value?
JavaScript मध्ये हे रंजक आहे. उदाहरण:
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);
याचा output असा येतो:
10
changed
unchanged
obj1 हा reference नसताच, तर obj1.item बदलल्याचा function च्या बाहेरील obj1 वर काहीही परिणाम झाला नसता.
Argument खरा reference असता, तर सगळेच बदलले असते: num 100 झाला असता आणि obj2.item मध्ये “changed” असते. उलट num 10 च राहतो आणि
obj2.item “unchanged” च राहतो.
प्रत्यक्षात pass केलेली गोष्ट by value pass होते. पण जी गोष्ट by value pass होते, ती स्वतःच एक reference असते. तांत्रिकदृष्ट्या याला call-by-sharing म्हणतात.
व्यवहारात याचा अर्थ: तुम्ही parameter च बदलला (जसे num आणि obj2 च्या बाबतीत), तर function मध्ये pass केलेल्या मूळ object वर त्याचा काहीही परिणाम होत
नाही. पण parameter ची internal values बदलली, तर ते बदल कायम राहतात (जसे obj1 च्या बाबतीत).