ՋավաՍկրիպտ

ՋավաՍկրիպտ (անգլ.՝ JavaScript), ինտերպրետացվող ծրագրավորման լեզու։ Այն համացանցում ամենահանրահայտ սկրիպտային լեզուն է և աշխատում է բոլոր հանրահայտ բրաուզերներում, որոնց թվում են Google Chrome, Mozilla Firefox, Օպերա և Սաֆարի։
Այս լեզուն առաջին անգամ կիրառվել է Netscape Communications-ի կողմից Netscape Navigator 2 beta (1995) բրաուզերում։ ՋավաՍկրիպտ լեզուն ստեղծվել է Բրենդան Այկի կողմից 1995 թվականին։


== Ինչ է ՋավաՍկրիպտը ==
ՋավաՍկրիպտը նախագծվել է կայքերի HTML էջերին դինամիկություն հաղորդելու համար
ՋավաՍկրիպտը սկրիպտային լեզու է
ՋավաՍկրիպտը սովորաբար ներառվում է ուղղակիորեն HTML ֆայլերի մեջ
ՋավաՍկրիպտը ինտերպրետացվող լեզու է


=== ՋավաՍկրիպտ ===
Նախքան Բրենդան Այկի ներգրավումը  Netscape ընկերություն (1995 թվականի  ապրիլի 4), խնդիր էր դրված ընդլայնել ծրագրավորման սխեման՝ Scheme  կամ Netscape զննարկիչում փոփոխության  ենթարկել որոշ կարևորագույն տարրեր։ Քանի-որ պահանջը դրված էր խիստ նպատակային, Էյխային ներգրավեցին ընկերություն, որպես սերվերային նյութերի պատասխանատու։ Նա այս աշխատանքը կատարեց շուրջ մեկ ամիս, զբաղվեց HTTP-ի  պրոտոկոլի բարելավման աշխատանքներով։ Այստեղ նա ծավալեց նաև նոր ծրագրավորման աշխատանքներ։ Մայիսի 8-ին ծրագրավորողը ետ վերադարձավ, զբաղվելով հաճախորդների սպասարկման աշխատանքներով (զննարկիչում), որտեղ էլ սկսեց վաստակել նոր ծրագրավորման լեզվի առաջխաղացման հաշվին։  Բացի Թոմ Պակինայից  (Tom Paquin),  Պիկա Շելլան (Rick Schell) ևս համոզված էր, որ  Netscape-ը պետք է աջակցի ծրագրավորման լեզվին, որը գրված է HTML կոդով ։

Բրենդան Էյխի հետ համագործակցում էին հիմնադիր (Netscape Communications) Մարկ Անդերսսեն և համահեղինակ (Sun Microsystems) Բիլլ Ջոյը։ Որպեսզի հաջողությամբ ավարտեին աշխատանքը, ընկերությունը համագործակցության պայմանագիր ստորագրեց։ Նրանք նպատակ էին դրել՝ ստեղծել այնպիսի ծրագրավորման լեզու, որը բազային ծրագրավորման մաս կկազմեր, հարմար կլիներ և՛ ոճաբանի, և՛ ցմ ծրագրավորողի համար, չէր պահանջիի լրացուցիչ ծավալուն և բարդ գործողություններ կատարելու անհրաժեշտություն։
Առաջին ծրագիրը կոչվում էր Mocha, այնուհետև անվանափոխվեց LiveScript և նախատեսված է թե՛ որպես ծրագրավորում՝ հաճախորդի համար, և թե՛ որպես ծրագիր՝ սերվերի համար  (այնտեղ այն պետք է ունենա LiveWire անվանում)։ Որպես սինտակսներ հանդես եկան Սի և Java լեզուները, ու, քանի որ այդ ժամանակ Java-ն համարվում էր խիստ ժամանակակից  ժամանակակից բառ, 1995 թ. դեկտեմբերի 4-ին  LiveScript լեզուն վերանվանեցին JavaScript, ստանալով արտոնագիր Sun-ից։  JavaScript անոնսը  Netscape-ի և Sun -ի համար հանդիսանում է  բետա-տարբերակի (Netscape Navigator) երկրորդ թողարկումը ։
1996 թվականին  Microsoft ընկերությունը թողարկեց JavaScript լեզուն,  JScript անվանումով։ Այն առաջադրվել էր  1996 թվականի հուլիսի 18-ին։ Առաջին զննարկիչը, որ աշխատեց  այս ծրագրի հետ,  Internet Explorer 3.0 էր։
Netscape-ը ներկայացված է որպես  ECMA ասսոցիացիայի լեզու։ Ստանդարտ տարբերակն ունի   ECMAScript անվանումը, նկարագրվում է ECMA-262 ստանդարտով։ Առաջին տարբերակը հանդիսացավ JavaScript  1.1 տարբերակը, ինչպես նաև  JScript և  ScriptEasy:


== Ինչ կարող է անել JavaScript-ը ==
JavaScript-ը HTML դիզայներին տալիս է ծրագրավորման գործիք
JavaScript-ը կարող է դինամիկ տեքստ ներդնել HTML էջի մեջ
JavaScript-ը կարող է արձագանքել իրավիճակներին(events), այսինքն ՝ JavaScript -ը կարող է գործել, երբ ինչ որ բան է պատահում, օրինակ երբ էջը ավարտում է բեռնավորումը, կամ երբ օգտագործողը մատնահարում է HTML էլեմենտի վրա
JavaScript-ը կարող է կարդալ և փոխել HTML էլեմենտի պարունակությունը
JavaScript-ը կարող է օգտագործվել տվյալը վավերացնելու համար մինչ վերջինիս սպասարկիչ ուղարկվելը։ Սա կարող է սպասարկչին զերծ պահել ավելորդ գործընթացներից և ծանրաբեռնվածությունից
JavaScript-ը կարող է օգտագործվել կայքից օգտվողի զննարկիչը ճանաչելու համար, և կախված զննարկչից՝ բեռնել տվյալ բրաուզերին սպեցիֆիկ էջը
JavaScript-ը կարող է օգտագործվել cookie-ներ ստեղծելու համարJavaScript-ի կառուցվածքը կարելի է բաժանել հետեևյալ 3 մասերի

ECMAScript
բրաուզերի օբյեկտավորված մոդել
դոկումենտի օբյեկտավորված մոդելJavaScript-ի դյուրըմբռնելիությունը կայանում է նրա օբյեկտների կառուցվածքի մեջ։ JavaScript-ը բավականին նման է C ծրագրավորման լեզվին։ JavaScript-ի օբյեկտները պարունակում են՝

մեթոդներ (ֆունկցիաներ)
հատկանիշներ՝ (տվյալներ կամ այլ օբյեկտներ) նկարագրում է օբյեկտների հատկանշական գծերը
իրադարձություններ (անգլ.՝ events), որոնք փոխկապակցված են օբյեկտների հետ
AngularJS - JavaScript- շրջանակ `բաց կոդով։


== Լեզվի ձևաբանությունը ==
JavaScript-ը կարելի է գրել անմիջապես HTML ֆայլի մեջ՝ կոդը ներառելով <script> բացվող և </script> փակվող թեգերի մեջ։ JavaScript-ը կարելի է նաև գրել .js ընդլայնմամբ առանձին ֆայլում։ Ներքևում ներկայացված է JavaScript-ի օգտագործման պարզագույն օրինակ՝

<!DOCTYPE html> 
<html>
<head>
<title>Օրինակ</title>

<script type="text/javascript">
alert("Hello World");
</script>

</head>
<body>
</body>
</html>

HTML ֆայլը ակտիվացնելիս կբացվի փոքր պատուհան Hello World ազդանշանով։


== Ավելի բարդ օրինակ ==
Այս ընտրանքային կոդը ներկայացնում է  JavaScript- ի տարբեր առանձնահատկություններ։
/*Գտնում է երկու թվերի ամենացածր ընդհանուր բազմապատիկը (LCM) (LCM) երկու թվերի համար */
function LCMCalculator(x, y) { // կոնստրուկտիվ ֆունկցիա

 var checkInt = function(x) { // ներքին գործառույթը
   if (x % 1 !== 0) {
     throw new TypeError(x + "is not an integer"); // var a =  mouseX
   };

   return x
 }
 this.a = checkInt(x)
   // semicolons   ^^^^   պարտադիր չէ, նոր գծի համարը բավարար է
 this.b = checkInt(y) գրառումը;

}
// Կառուցողի կողմից ստեղծված օբյեկտի նմուշների նախատիպը
//  կոնստրուկտորի «նախատիպը» 
LCMCalculator.prototype = { // օբյեկտի հիմնական
   կոնստրուկտոր։ LCMCalculator, // Սահմանվում է ծրագրային կոդը
   gcd: function() { // մեթոդը, որը հաշվարկում է  բաժանարարը

   // Euclidean ալգորիթմը։
   var a = Math.abs(this.a),
     b = Math.abs(this.b),
     t;
   if (a < b) {
     // swap variables
     t = b;
     b = a;
     a = t;
   }
   while (b !== 0) {
     t = b;
     b = a % b;
     a = t;
   }
   // Միայն անհրաժեշտ է հաշվարկել GCD- ն մեկ անգամ, կիրառվում է «վերահղման» այս մեթոդը։
   // Իրականում ոչ վերաձևակերպում, այն սահմանվում է օրինակով,
    // այսպիսին, որ this.gcd- ը վերաբերում է  LCMCalculator.prototype.gcd- ի փոխարեն այս «վերաձևակերպմանը» ։
    // Նշեք, որ , եթե LCMCalculator օբյեկտի անդամները «ա» և / կամ «բ» են փոխվել, դա հանգեցնում է սխալ արդյունքների։

   // Also, 'gcd' === "gcd", this['gcd'] === this.gcd
   this['gcd'] = function() {
     return a;
   };
   return a;
 },
 // Օբյեկտի  անվանումները կարող են սահմանվել ըստ տողերի կողմից (") կամ single (') մեջբերումներ։
 lcm: function() {
   // Variable անունները կապված չեն  օբյեկտի հատկությունների հետ, e.g., |lcm|ոչ թե |this.lcm|:
   //չօգտագործել |this.a*this.b| խուսափելով FP ճշգրտության դասերից։
   var lcm = this.a / this.gcd() * this.b;
   // Միայն մեկ անգամ պետք է հաշվարկի lcm, այնպես որ «վերահղեք» այս մեթոդը։
   this.lcm = function() {
     return lcm;
   };
   return lcm;
 },
 toString: function() {
   return "LCMCalculator: a = " + this.a + ", b = " + this.b;
 }

};
// Սահմանել ընդհանուր  գործառույթ. այն իրականացվում է վեբ բրաուզերների համար։
function output(x) {

 document.body.appendChild(document.createTextNode(x));
 document.body.appendChild(document.createElement('br'));

}
// Նշում։ Array's map() and forEach() սահմանվում են JavaScript 1.6  տարբերակի համար։
// Դրանք կիրառվում են այստեղ JavaScript- ին բնորոշ ֆունկցիոնալությունը ցուցադրելու համար։
[

 [25, 55],
 [21, 56],
 [22, 58],
 [28, 56]

].map(function(pair) { // array literal + mapping function

   return new LCMCalculator(pair[0], pair[1]);
 }).sort((a, b) => a.lcm() - b.lcm()) // sort with this comparative function; => is a shorthand form of a function, called "arrow function"
 .forEach(printResult);

function printResult(obj) {

 output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());

}
Բրաուզերի պատուհանում պետք է ցուցադրվի հետևյալ արդյունքը.
LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168
LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275
LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638


== Տարբերակների պատմություն ==


== Ծանոթագրություններ ==


== Արտաքին հղումներ ==
ՋավաՍկրիպտի կոնֆերանս
ՋավաՍկրիպտի հիմունքներ
ՋավաՍկրիպտի դասընթաց