मेरी 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औरbका boolean होना ज़रूरी है। - 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 के साथ)।