میرے بہترین طریقے – JavaScript
1. کیش غیر فعال کریں
Firefox:
Developer Tools کھولیں -> سیٹنگز کھولیں (F1) -> "Disable HTTP Cache (when toolbox is open)"
Chrome:
Developer Tools کھولیں -> سیٹنگز کھولیں (F1) -> "Disable cache (while DevTools is open)"
2. JS کنسول کھلا رکھیں
Dev Tools میں Console ٹیب کھولیں اور اسے کھلا رکھیں، تاکہ مرحلہ 1 مؤثر رہے اور ساتھ ہی آپ کو نیٹ ورک اور JS کی خرابیاں بھی نظر آتی رہیں۔
یہ پلگ اِن بھی قابلِ سفارش ہے، جو JS کی خرابیوں کو اور بھی بہتر طور پر دکھاتا ہے، جب آپ خود ان پر نظر رکھنا بھول جائیں:
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. منطقی آپریٹرز && اور ||
- Java میں
a && bاورa || bبولین الجبرا کے مطابق evaluate ہوتے ہیں۔aاورbکا Boolean ہونا لازمی ہے۔ - JavaScript میں:
a && bمیں، اگرatrue ہو توbواپس کیا جاتا ہےa || bمیں، اگرafalse ہو توbواپس کیا جاتا ہے
Expressions کو بھی اس طرح جوڑا جا سکتا ہے، جس سے اب تک کا مختصر ترین if اسٹیٹمنٹ ممکن ہو جاتا ہے – Syntax Sugar:
isAdmin && showDeleteButton();- (درست طور پر کہا جائے تو یہ اب Statement نہیں رہا)
یہ طریقہ ڈیفالٹ ویلیوز کے لیے بھی خوب استعمال ہوتا ہے:
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);
یہ درج ذیل آؤٹ پٹ دیتا ہے:
10
changed
unchanged
اگر obj1 سرے سے ریفرنس ہی نہ ہوتا، تو obj1.item کو بدلنے کا فنکشن کے باہر والے obj1 پر کوئی اثر نہ ہوتا۔
اگر آرگیومنٹ ایک حقیقی ریفرنس ہوتا، تو سب کچھ بدل جاتا: num کی قدر 100 ہوتی، اور obj2.item میں “changed” ہوتا۔ اس کے بجائے num 10 ہی رہتا ہے اور
obj2.item “unchanged” ہی رہتا ہے۔
درحقیقت بھیجا گیا عنصر by value پاس ہوتا ہے۔ تاہم جو چیز by value پاس ہوتی ہے، وہ خود ایک ریفرنس ہے۔ تکنیکی طور پر اسے شیئرنگ کے ذریعے کال (call-by-sharing) کہا جاتا ہے۔
عملی طور پر اس کا مطلب ہے: اگر آپ خود پیرامیٹر کو بدلیں (جیسے num اور obj2 کے ساتھ)، تو فنکشن میں بھیجے گئے اصل آبجیکٹ پر اس کا کوئی اثر نہیں ہوتا۔
لیکن اگر آپ پیرامیٹر کی اندرونی ویلیوز بدلیں، تو یہ تبدیلیاں برقرار رہتی ہیں (جیسے obj1 کے ساتھ)۔