جاوا اسکرپٹ کے قواعد کے تحت ان اصول و ضوابط کا احاطہ کیا جاتا ہے جن کے ذریعہ جاوا سکرپٹ کے پروگراموں کو درست اور غلطیوں سے پاک بنایا جا سکے۔
نیچے پیش کردہ مثالوں میں alert فنکشن استعمال کیا گیا ہے۔ دراصل جاوا اسکرپٹ کی معیاری لائبریری میں ایسا فنکشن موجود نہیں جس کے ذریعہ ٹیکسٹ دکھایا جائے۔ لیکن چونکہ جاوا اسکرپٹ اس وقت اکثر ویب براؤزر میں کلائنٹ سائڈ اسکرپٹنگ کے لیے استعمال ہو رہی ہے اور تقریباً تمام براؤزروں میں alert فنکشن کی سہولت موجود ہوتی ہے، اس لیے ان مثالوں میں اس فنکشن کو استعمال کیا گیا ہے۔
جاوا اسکرپٹ نے اپنے بیشتر قواعد جاوا سے لیے ہیں، جبکہ کچھ چیزیں اوک اور پرل سے بھی لی گئی ہیں، نیز آبجیکٹ پروٹو ٹائپ سسٹم میں سیلف زبان کے بلا واسطہ اثرات بھی موجود ہیں۔
“
مقدمات
حرفی حساسیت
جاوا اسکرپٹ زبان چھوٹے اور بڑے حروف کے ضمن میں حساس (sensitive) ہے۔ چنانچہ عموماً Constructor کو بڑے حروف میں اور فنکشن کے ناموں کو چھوٹے حروف میں لکھنے کا رواج نظر آتا ہے۔
نام فضا اور سیمی کولن
سٹرنگ کے باہر ٹیبز، سپیس اور نئی سطروں کے استعمال کو وہائٹ سپیس (White space) کہا جاتا ہے۔ سی جیسی زبانوں کے برخلاف جاوا اسکرپٹ وہائٹ سپیس کے حق میں حساس واقع ہوئی ہے، چناں چہ سیمی کولن کا عدم استعمال یا غلط استعمال براہ راست پروگرام پر اثر انداز ہو سکتا ہے اور ایرر آ سکتا ہے۔[2] درج ذیل مثالیں ملاحظہ کریں:
a=b+c(d+e).foo()// Treated as:// a = b + c(d + e).foo();
لیکن
a=b+c;(d+e).foo()// Treated as:// a = b + c;// (d + e).foo();
returna+b;// Returns undefined. Treated as:// return;// a + b;// Should be written as:// return a + b;
تبصرے
جاوااسکرپٹ میں تبصرے درج کرنے کا انداز بالکل سی پلس پلس اور دیگر زبانوں ہی کی طرح ہے۔
// a short, one-line comment/* this is a long, multi-line comment about my script. May it one day be great. *//* Comments /* may not be nested */Syntaxerror*/
متغیرات
جاوااسکرپٹ کے متغیرات (Variables) میں معلومات درج کرنے کے دوران ٹائپ نہیں لکھا جاتا، نیز ان متغیرات میں ہر قسم کی معلومات کو رکھا جا سکتا ہے۔ نئے متغیرات درج کرنے کے لیے نئی سطر کے آغاز میں var، let یا const تحریر کرتے ہیں اور پھر متغیر کا نام دیا جاتا ہے، نیز ایک ہی وقت میں متعدد متغیرات بھی دیے جا سکتے ہیں۔
ان متغیرات میں خصوصی علامات مثلاً #،٪ وغیرہ استعمال نہیں کی جا سکتیں، نیز جاوا اسکرپٹ زبان کے کچھ مخصوص الفاظ ہیں جیسے default, while, do, break وغیرہ، انھیں بھی استعمال نہیں کیا جا سکتا۔
مثالیں
ذیل میں متغیرات کی مثال ملاحظہ کریں:
varx=0;// A global variable, because it is not in any functionfunctionf(){varz='foxes',r='birds';// 2 local variablesm='fish';// global, because it wasn't declared anywhere beforefunctionchild(){varr='monkeys';// This variable is local and does not affect the "birds" r of the parent function.z='penguins';// Closure: Child function is able to access the variables of the parent function.}twenty=20;// This variable is declared on the next line, but usable anywhere in the function, even before, as herevartwenty;child();returnx;// We can use x here, because it is global}f();alert(z);// This line will raise a ReferenceError exception, because the value of z is no longer available
ڈیٹا ٹائپس
جاوااسکرپٹ کے متغیرات میں مختلف اقسام کے ڈیٹا ٹائپس رکھے جا سکتے ہیں، مثلاً اعداد، سٹرنگز، ایرے وغیرہ۔
غیر تعریف شدہ
غیر تعریف شدہ (Undefined) ڈیٹا ٹائپ ان متغیرات کو کہا جاتا ہے جنہیں initialize نہ کیا گیا ہو، یعنی انھیں کوئی ویلیو نہ دی گئی ہے۔ بولین (Boolean) ڈیٹا ٹائپ میں اس طرح کے متغیرات نا درست (false) سمجھے جاتے ہیں۔
vartest;// variable declared, but not defined, ...// ... set to value of undefinedvartestObj={};alert(test);// test variable exists, but value not ...// ... defined, displays undefinedalert(testObj.myProp);// testObj exists, property does not, ...// ... displays undefinedalert(undefined==null);// unenforced type during check, displays truealert(undefined===null);// enforce type during check, displays false
واضح رہے کہ جاوااسکرپٹ میں غیر تعریف شدہ نام سے کوئی ٹائپ نہیں بنائی گئی ہے، چناں چہ (x == undefined) کو یہ جانچنے کے لیے استعمال کرنا کہ متغیر کو کوئی ویلیو دی گئی ہے یا نہیں، کوئی بہت زیادہ درست طریقہ نہیں ہے۔ کیونکہ ECMAScript 5 سے قبل اس var undefined = "I'm defined now"; طرح لکھنا بالکل درست تھا۔ بلکہ بہتر یہ ہے کہ اس مقصد کے لیے (typeof x === 'undefined') کو استعمال کیا جائے۔
اس قسم کے فنکشنز مطلوبہ کام انجام نہیں دیتے:
functionisUndefined(x){varu;returnx===u;}// like this...functionisUndefined(x){returnx===void0;}// ... or that second onefunctionisUndefined(x){return(typeofx)===undefined";}// ... or that third one
نل (null)
غیر تعریف شدہ کے برخلاف، نل ویلیو اکثر اس بات کا اشارہ کرتی ہے کہ جو بیان کیا گیا ہے وہ خالی ہے۔ بولین (Boolean) میں نل false value سمجھی جاتی ہے۔
alert(null==undefined);// unenforced type during check, displays truealert(null===undefined);// enforce type during check, displays falsealert(typeofnull==='object');// true
اسٹرنگ
جملوں کو اسٹرنگ کہا جاتا ہے۔ جاوا اسکرپٹ میں سٹرنگ کو واوین (double یا single quotes) میں رکھا جاتا ہے۔
vargreeting="Hello, World!";varanotherGreeting='Greetings, people of Earth.';
انفرادی حروف کو دکھانے کے لیے charAt طریقہ (جو String.prototype فراہم کرتا ہے) استعمال کیا جا سکتا ہے۔ کسی بھی سٹرنگ میں کسی انفرادی حرف تک رسائی پانے کے لیے یہ راجح طریقہ ہے کیونکہ یہ غیر معیاری براؤزرز میں بھی کام کرتا ہے۔
varh=greeting.charAt(0);
جدید معیاری براؤزرز میں اس کام کے لیے دوسرا متبادل طریقہ بھی استعمال کیا جا سکتا ہے (یہی طریقہ ایرے میں بھی استعمال کیا جاتا ہے)۔
varh=greeting[0];
واضح رہے کہ اس انداز میں سٹرنگ کے حروف کو حاصل نہیں کیا جا سکتا:
greeting[0]="H";// Fails.
برابر کے نشان (==) کے ذریعہ یہ معلوم کیا جا سکتا ہے کہ آیا دونوں سٹرنگز کے حروف نوع اور لمبائی کے لحاظ سے یکساں ہے یا نہیں۔
varx="World";varcompare1=("Hello, "+x==Hello,World"); // Here compare1 contains true.var compare2 = ("Hello," +x == hello, World");// Here compare2 contains ...// ... false since the ...// ... first characters ...// ... of both operands ...// ... are not of the same case.
واوین کے اندر واوین نہیں استعمال کیے جا سکتے ہیں، جب تک انھیں escape نہ کیا جائے:
varx='"Hello, World!" he said.'// Just fine.varx=""Hello,World!" he said."// Not good.varx="\"Hello, World!\" he said."// That works by replacing " with \"
نیز String کنسٹرکٹر کے ذریعہ بھی سٹرنگ بنائی جا سکتی ہے:
vargreeting=newString("Hello, World!");
valueOf کے ذریعہ سٹرنگ آبجیکٹ کی primitive ویلیو معلوم کی جا سکتی ہے۔
vars=newString("Hello!");typeofs;// Is 'object'.typeofs.valueOf();// Is 'string'.
واضح رہے کہ دو سٹرنگ آبجیکٹ کے درمیان یکسانی سٹرنگز کے درمیان عمومی یکسانی کی طرح نہیں ہوتی۔
vars1=newString("Hello!");vars2=newString("Hello!");s1==s2;// Is false, because they are two distinct objects.s1.valueOf()==s2.valueOf();// Is true.