**جاوااسکرپٹ کے قواعد** کے تحت ان قواعد کا احاطہ کیا جاتا ہے جن کے ذریعہ جاوا سکرپٹ پروگرام کو درست اور غلطیوں سے پاک بنایا جاسکے۔  

نیچے پیش کردہ مثالوں میں alert فنکشن استعمال کیا گیا ہے۔ دراصل جاوااسکرپٹ کی معیاری لائبریری میں ایسا فنکشن موجود نہیں جس کے ذریعہ ٹیکسٹ دکھایا جائے۔ لیکن چونکہ جاوااسکرپٹ اس وقت اکثر ویب براؤزز میں کلائنٹ سائڈاسکرپٹنگ کے لیے استعمال ہو رہی ہے اور تقریبا تمام ہی براؤزرز میں alert فنکشن کی سہولت موجود ہوتی ہے، اس لیے ان مثالوں میں اس فنکشن کو استعمال کیا گیا ہے۔

آغاز
----

برنڈن ایچ نے جاوااسکرپٹ پروگرامنگ زبان کے ورژن 1٫1 کی خصوصیات کا اس طرح خلاصہ پیش کیا تھا:

|  |  |  |
| --- | --- | --- |
| "| جاوا سکرپٹ نے اپنے بیشتر قواعد جاوا سے لیے ہیں، جبکہ کچھ چیزیں اوک اور پرل سے بھی لی گئی ہیں، نیز آبجیکٹ پروٹو ٹائپ سسٹم میں سیلف زبان کے بلا واسطہ اثرات بھی موجود ہیں۔ | "|

مقدمات
------

### حرفی حساسیت

جاوااسکرپٹ زبان چھوٹے اور بڑے حروف کے ضمن میں حساس (sensitive) ہے۔ چناں چہ عموماً Constructor کو بڑے حروف میں اور فنکشن کے ناموں کو چھوٹے حروف میں لکھنے کا رواج ہے۔

### نام فضا اور سیمی کولن

سٹرنگ کے باہر ٹیبز، سپیس اور نئی سطروں کے استعمال کو وہائٹ سپیس (White space) کہا جاتا ہے۔ سی جیسی زبانوں کے برخلاف جاوااسکرپٹ وہائٹ سپیس کے حق میں حساس واقع ہوئی ہے، چناں چہ سیمی کولن کا عدم استعمال یا غلط استعمال براہ راست پروگرام پر اثر انداز ہو سکتا ہے اور ایرر آ سکتا ہے۔ درج ذیل مثالیں ملاحظہ کریں:

```
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();

```

```
return
a + 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 \*/ Syntax error \*/

```

متغیرات
-------

جاوااسکرپٹ کے متغیرات (Variables) میں معلومات درج کرنے کے دوران ٹائپ نہیں لکھا جاتا، نیز ان متغیرات میں ہر قسم کی معلومات کو رکھا جاسکتا ہے۔ نئے متغیرات درج کرنے کے لیے نئی سطر کے آغاز میں `var` تحریر کرتے ہیں اور پھر متغیر کا نام دیا جاتا ہے، نیز ایک ہی وقت میں متعدد متغیرات بھی دیے جا سکتے ہیں۔  

ان متغیرات میں خصوصی علامات مثلاً #،٪ وغیرہ استعمال نہیں کی جاسکتیں، نیز جاوااسکرپٹ زبان کے کچھ مخصوص الفاظ ہیں جیسے default, while, do, break وغیرہ، انھیں بھی استعمال نہیں کیا جاسکتا۔

### مثالیں

ذیل میں متغیرات کی مثال ملاحظہ کریں:

```
var x = 0; // A global variable, because it is not in any function

function f() {
 var z = 'foxes', r = 'birds'; // 2 local variables
 m = 'fish'; // global, because it wasn't declared anywhere before

 function child() {
 var r = '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 here
 var twenty;

 child();
 return x; // 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) سمجھے جاتے ہیں۔

```
var test; // variable declared, but not defined, ...
 // ... set to value of undefined
var testObj = {};
alert(test); // test variable exists, but value not ...
 // ... defined, displays undefined
alert(testObj.myProp); // testObj exists, property does not, ...
 // ... displays undefined
alert(undefined == null); // unenforced type during check, displays true
alert(undefined === null); // enforce type during check, displays false

```

واضح رہے کہ جاوااسکرپٹ میں غیر تعریف شدہ نام سے کوئی ٹائپ نہیں بنائی گئی ہے، چناں چہ `(x == undefined)` کو یہ جانچنے کے لیے استعمال کرنا کہ متغیر کو کوئی ویلیو دی گئی ہے یا نہیں، کوئی بہت زیادہ درست طریقہ نہیں ہے۔ کیونکہ ECMAScript 5 سے قبل اس `var undefined = "I'm defined now";` طرح لکھنا بالکل درست تھا۔ بلکہ زیادہ بہتر یہ ہے کہ اس مقصد کے لیے `(typeof x === 'undefined')` کو استعمال کیا جائے۔

اس قسم کے فنکشنز مطلوبہ کام انجام نہیں دیتے:

```
function isUndefined(x) { var u; return x === u; } // like this...
function isUndefined(x) { return x === void 0; } // ... or that second one
function isUndefined(x) { return (typeof x) === undefined"; } // ... or that third one

```

### نل (null)

غیر تعریف شدہ کے برخلاف، نل ویلیو اکثر اس بات کا اشارہ کرتی ہے کہ جو بیان کیا گیا ہے وہ خالی ہے۔ بولین (Boolean) میں نل false value سمجھی جاتی ہے۔

```
alert(null == undefined); // unenforced type during check, displays true
alert(null === undefined); // enforce type during check, displays false
alert(typeof null === 'object'); // true

```

### اسٹرنگ

جملوں کو اسٹرنگ کہا جاتا ہے۔ جاوا اسکرپٹ میں سٹرنگ کو واوین (double یا single quotes) میں رکھا جاتا ہے۔

```
var greeting = "Hello, World!";
var anotherGreeting = 'Greetings, people of Earth.';

```

انفرادی حروف کو دکھانے کے لیے charAt طریقہ (جو String.prototype فراہم کرتا ہے) استعمال کیا جا سکتا ہے۔ کسی بھی سٹرنگ میں کسی انفرادی حرف تک رسائی پانے کے لیے یہ راجح طریقہ ہے کیونکہ یہ غیر معیاری براؤزرز میں بھی کام کرتا ہے۔

```
var h = greeting.charAt(0);

```

جدید معیاری براؤزرز میں اس کام کے لیے دوسرا متبادل طریقہ بھی استعمال کیا جاسکتا ہے (یہی طریقہ ایرے میں بھی استعمال کیا جاتا ہے)۔

```
var h = greeting[0];

```

واضح رہے کہ اس انداز میں سٹرنگ کے حروف کو حاصل نہیں کیا جا سکتا:

```
greeting[0] = "H"; // Fails.

```

برابر کے نشان (==) کے ذریعہ یہ معلوم کیا جا سکتا ہے کہ آیا دونوں سٹرنگز کے حروف نوع اور لمبائی کے لحاظ سے یکساں ہے یا نہیں۔

```
var x = "World";
var compare1 = ("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 نہ کیا جائے:

```
var x = '"Hello, World!" he said.' // Just fine.
var x = ""Hello, World!" he said." // Not good.
var x = "\"Hello, World!\" he said." // That works by replacing "with \"

```

نیز String کنسٹرکٹر کے ذریعہ بھی سٹرنگ بنائی جاسکتی ہے:

```
var greeting = new String("Hello, World!");

```

valueOf کے ذریعہ سٹرنگ آبجیکٹ کی primitive ویلیو معلوم کی جاسکتی ہے۔

```
var s = new String("Hello!");
typeof s; // Is 'object'.
typeof s.valueOf(); // Is 'string'.

```

واضح رہے کہ دو سٹرنگ آبجیکٹ کے درمیان یکسانی سٹرنگز کے درمیان عمومی یکسانی کی طرح نہیں ہوتی۔

```
var s1 = new String("Hello!");
var s2 = new String("Hello!");
s1 == s2; // Is false, because they are two distinct objects.
s1.valueOf() == s2.valueOf(); // Is true.

```

حوالہ جات
---------

1. ↑  JavaScript 1.1 specification
2. ↑  David Flanagan (2006)۔ JavaScript: The definitive Guide۔ صفحہ: 16۔ ISBN 978-0-596-10199-2۔ Omitting semicolons is not a good programming practice; you should get into the habit of inserting them.

بیرونی روابط
------------

|  |  |
| --- | --- |
|  | ویکی کتب پر ایک کتاب تفصیلات
***JavaScript*** |

* A re-introduction to JavaScript - Mozilla Developer Center
* Comparison Operators in JavaScriptآرکائیو شدہ (Date missing) بذریعہ how-to-code.com (Error: unknown archive URL)
* ECMAScript standard references: ECMA-262
* Interactive JavaScript Lessons - example-basedآرکائیو شدہ (Date missing) بذریعہ javalessons.com (Error: unknown archive URL)
* JavaScript on About.com: lessons and explanationآرکائیو شدہ (Date missing) بذریعہ javascript.about.com (Error: unknown archive URL)
* JavaScript Trainingآرکائیو شدہ (Date missing) بذریعہ wisentechnologies.com (Error: unknown archive URL)
* Mozilla Developer Center Core References for JavaScript versions 1.5, 1.4[*مردہ ربط*], 1.3[*مردہ ربط*] and 1.2[*مردہ ربط*]
* Mozilla JavaScript Language Documentation

| * د
* ب
* ت
جاوا سکرپٹ |
| --- |
| تجزیہ کوڈ | 
* جے ایس ہنٹ
* جے ایس لنٹ

 |
| کمپائلر | 
* کوفی سکرپٹ
* Google Closure Compiler
* گوگل ویب ٹول کٹ
* Morfik
* TypeScript

 |
| تصورات | 
* اجیکس
* کلائنٹ سائڈ
* ڈائنامک ایچ ٹی ایم ایل
* کتب خانہ جاوا سکرپٹ
* جاوا سکرپٹ کے قواعد
* Unobtrusive JavaScript

 |
| ڈی بگرز | 
* فائربگ
* Microsoft Script Debugger
* Microsoft Script Editor
* مائیکروسافٹ ویژیول اسٹوڈیو
* Opera Dragonfly
* Microsoft Visual Web Developer Express
* Venkman
* Web Inspector

 |
| Doc generators | 
* جے ایس ڈوک

 |
| ترمیم کار | 
* جاوا سکرپٹ
* Comparison of JavaScript-based source code editors

 |
| انجن | 
* Comparison of layout engines
* List of ECMAScript engines
* List of JavaScript engines

 |
| فریم ورک | 
* Comparison of JavaScript frameworks
* List of JavaScript libraries

 |
| متعلقہ زبانیں | 
* ActionScript
* asm.js
* کوفی سکرپٹ
* Dart
* ECMAScript
* JavaScript OSA
* JScript
* TypeScript
* VBScript

 |
| متعلقہ ٹکنالوجیاں | 
* سی ایس ایس
* Document Object Model
* ورائےمتن زبان تدوین
* JSON

 |
| وسائل | 
* npm
* نو گٹ

 |
| سرور سائڈ | 
* Active Server Pages
* کامن جے ایس
* JSGI
* نوڈ جے ایس
* Wakanda

 |
| Unit testing | 
* Jasmine
* JSUnit
* QUnit
* List of JavaScript unit testing frameworks

 |
| افراد | 
* ڈگلس کروکفرڈ
* برنڈن ایچ
* John Resig

 |