**ECMAScript** — JavaScript, JScript və ActionScript daxil olmaqla skript dilləri üçün standart. Bu, müxtəlif veb-brauzerlər arasında veb-səhifələrin qarşılıqlı əlaqəsini təmin etmək üçün nəzərdə tutulmuş JavaScript standartı kimi tanınır. ECMA-262 sənədində Ecma International tərəfindən standartlaşdırılıb.

ECMAScript adətən World Wide Web-də müştəri tərəfi skripti üçün istifadə olunur və o, işləmə mühitləri olan Node.js, deno və bun istifadə edən server proqramları və xidmətləri üçün getdikcə daha çox istifadə olunur.

Tarixi
------

ECMAScript spesifikasiyası Brendan Eyx tərəfindən hazırlanmış, əvvəlcə Mocha, sonra LiveScript və nəhayət JavaScript adlandırılan skript dilinin standartlaşdırılmış spesifikasiyasıdır. 1995-ci ilin dekabrında Sun Microsystems və Netscape press-relizlə JavaScript-i elan etdilər. 1996-cı ilin noyabrında Netscape JavaScript-in standartlaşdırılmasını inkişaf etdirmək üçün Ecma International standartlar təşkilatının iclasını elan etdi. ECMA-262-nin ilk nəşri 1997-ci ilin iyununda Ecma Baş Assambleyası tərəfindən qəbul edilmişdir. O vaxtdan bəri dil standartının bir neçə nəşri yayımlanmışdır. "ECMAScript" adı dilin standartlaşdırılması ilə məşğul olan təşkilatlar, xüsusilə Netscape və Microsoft arasında kompromis idi, onların mübahisələri ilkin standartlar sessiyalarında üstünlük təşkil edirdi. Eyx, "ECMAScript həmişə ekzema kimi səslənən arzuolunmaz bir əmtəə adı idi" demişdi. ECMAScript təhlükəsizlik təhlili və standartlaşdırma üçün Stenford Universitetində və London İmperial Kollecinin Hesablama Departamentində əməliyyat semantikası vasitəsilə rəsmiləşdirilib. "ECMA" 1994-cü ilə qədər "Avropa Kompüter İstehsalçıları Assosiasiyası"nı (*ing.* European Computer Manufacturers Association) ifadə edirdi.

Xüsusiyyətləri
--------------

ECMAScript dili strukturlaşdırılmış, dinamik, funksional və prototip əsaslı xüsusiyyətləri ehtiva edir.

### İmperativ və strukturlaşdırılmış

ECMAScript JavaScript C tipli strukturlaşdırılmış proqramlaşdırmanı dəstəkləyir. Əvvəllər JavaScript yalnız `var` açar sözündən istifadə edərək funksiyaların əhatə dairəsini dəstəkləyirdi, lakin ECMAScript 2015 `let` və `const` açar sözlərini əlavə etdi və JavaScript-ə həm blokun əhatə dairəsini, həm də funksiyaların əhatəsini dəstəkləməyə imkan verdi. JavaScript avtomatik nöqtəli vergülün qoyulmasını dəstəkləyir, yəni adətən C dilində ifadəni dayandıran nöqtəli vergüllər JavaScript-də istifadə olunmaya bilər.

C tipli dillər kimi, nəzarət axını `while`, `for`, `do / while`, `if / else` və `switch` ifadələri ilə həyata keçirilir. Funksiyalar zəif tiplidir və istənilən tipi qəbul edib qaytara bilər. Göstərilməyən arqumentlər defolt olaraq `undefined` olur.

### Zəif tipli

ECMAScript zəif tiplidir. Bu o deməkdir ki, müəyyən tiplər yerinə yetirilən əməliyyat əsasında gizli şəkildə təyin edilir. Bununla belə, JavaScript-də dəyişənin bir tipdən digərinə çevrilməsinin həyata keçirilməsində bir neçə qəribəlik var. Bu qəribəliklər *"Wat"* adlı müzakirənin mövzusu olmuşdur.

### Dinamik

ECMAScript dinamikdir. Tip ifadə ilə deyil, dəyərlə əlaqələndirilir. ECMAScript obyektlərin növünü yoxlamaq üçün müxtəlif yolları, o cümlədən "duck typing"i dəstəkləyir.

### Transpilyasiya

ES 2015-dən bəri JavaScript-in transpilyasiyası çox adi hala çevrilib. Transpilyasiya JavaScript-in daha yeni versiyalarının istifadə olunduğu mənbədən mənbəyə kompilyasiyadır və ötürücü mənbə kodunu köhnə brauzerlər tərəfindən dəstəklənməsi üçün yenidən yazır. Adətən, transpilerlər brauzerlərin bütün versiyaları ilə uyğunluğu qorumaq üçün ES3-ə qədər enir. Müəyyən bir versiyaya köçürmək üçün parametrlər ehtiyaca uyğun olaraq konfiqurasiya edilə bilər. Transpilyasiya qurulma prosesinə əlavə bir addım əlavə edir və bəzən polifillərə ehtiyac duymamaq üçün edilir. Polifillər onlara çatmayan köhnə mühitlər üçün yeni xüsusiyyətlər yaradır və bunu istifadəçinin brauzeri və ya server kimi tərcüməçinin iş mühitində edir. Bunun əvəzinə, transpilyasiya ECMA kodunu tərcüməçiyə çatmazdan əvvəl tərtibatın qurma mərhələsində özü yenidən yazır.

Uyğunluq
--------

2010-cu ildə Ecma International Ecma 262 ECMAScript üçün standart testini hazırlamağa başladı. Test262 JavaScript tətbiqinin ECMAScript Spesifikasiyasına nə qədər yaxından əməl etdiyini yoxlamaq üçün istifadə edilə bilən ECMAScript uyğunluq test paketidir. Test dəsti minlərlə fərdi testdən ibarətdir, onların hər biri ECMAScript spesifikasiyasının bəzi xüsusi tələblərini sınaqdan keçirir. Test262-nin inkişafı Ecma Texniki Komitəsinin 39 (TC39) layihəsidir. Test freymvorku və fərdi testlər TC39-un üzv təşkilatları tərəfindən Ecma-ya təqdim olunur.

Google (Sputnik test paketi) və hər ikisi minlərlə testdə iştirak edən Microsoft tərəfindən layihəyə mühüm töhfələr verilib. Test262 test paketi 2020-ci ilin yanvar ayına olan 38014 testdən ibarət idi. ES7 vasitəsilə ECMAScript spesifikasiyası əsas veb-brauzerlərdə yaxşı dəstəklənir. Aşağıdakı cədvəl ECMAScript-in ən son nəşrləri ilə bağlı proqram təminatının cari versiyaları üçün uyğunluq dərəcəsini göstərir.

Skriptləmə mühərrikinin uyğunluğu| Skriptləşdirmə mühərriki | İstinad tətbiqləri | Uyğunluq |
| --- | --- | --- |
| ES5 | ES6 (2015) | ES7 (2016) | Yeni (2017+) |
| SpiderMonkey | Firefox 94 | 100% | 98% | 100% | 100% |
| V8 | Google Chrome 95, Microsoft Edge 95, Opera 80 | 100% | 98% | 100% | 100% |
| JavaScriptCore | Safari 15 | 100% | 99% | 100% | 90% |

ECMAScript, ECMA-262, JavaScript
--------------------------------

ECMA-262 və ya ECMAScript Dil Spesifikasiyası ECMAScript Dilini və ya sadəcə ECMAScript-i müəyyən edir. ECMA-262 yalnız dil sintaksisini və `Array`, `Function` və `globalThis` kimi əsas tətbiqi proqramlaşdırma interfeysinin (API) semantikasını müəyyən edir, JavaScript-in etibarlı tətbiqləri isə giriş/çıxış və fayl sistemi ilə işləmə kimi öz funksiyalarını əlavə edir.

İstinadlar
----------

1. ↑  Scripting Media Type. 2006.
2. ↑  *Stefanov, Stoyan.* JavaScript Patterns. O'Reilly Media, Inc. 2010. səh. 5. ISBN 9781449396947. 2016-06-10 tarixində arxivləşdirilib. İstifadə tarixi: 2016-01-12. The core JavaScript programming language [...] is based on the *ECMAScript* standard, or ES for short.
3. ↑  *Wirfs-Brock, Allen; Eich, Brendan.* "JavaScript: The First 20 Years". Proceedings of the ACM on Programming Languages. 4. 2020-05-02: 1–189. doi:10.1145/3386327.
4. ↑  "ECMAScript 2015 (ES6) and beyond | Node.js". nodejs.org.
5. ↑  *Krill, Paul.* "Deno joins JavaScript standards effort". InfoWorld. 14 dek 2021.
6. ↑   bun
7. ↑  *Krill, Paul.* "JavaScript creator ponders past, future". infoworld.com. InfoWorld. 2008-06-23. 2014-09-20 tarixində arxivləşdirilib. İstifadə tarixi: 2013-10-31.
8. ↑  "Netscape and Sun announce JavaScript, the Open, Cross-platform Object Scripting Language for Enterprise Networks and the Internet". Netscape.com. Netscape. 1995-12-04. 2002-06-06 tarixində orijinalından arxivləşdirilib. İstifadə tarixi: 2019-11-04.
9. ↑  *Press Release.* "Industry Leaders to Advance Standardization of Netscape's JavaScript at Standards Body Meeting". Netscape.com. Netscape. November 15, 1996. 1998-12-03 tarixində orijinalından arxivləşdirilib. İstifadə tarixi: 2013-10-31.
10. ↑  *Eich, Brendan.* "Will there be a suggested file suffix for es4?". mozilla.org. Mail.mozilla.org. 2006-10-03. 2020-06-21 tarixində arxivləşdirilib. İstifadə tarixi: 2021-05-05.
11. ↑  *Maffeis, Sergio; Mitchell, John C.; Taly, Ankur.* "An Operational Semantics for JavaScript" (PDF). stanford.edu. Association for Computing Machinery. 2020-01-03. 2020-01-03 tarixində arxivləşdirilib (PDF). İstifadə tarixi: 2020-01-03.
12. ↑  "About". ECMAScript. 2012-08-02 tarixində orijinalından arxivləşdirilib. İstifadə tarixi: 2009-12-17.
13. ↑  *David Flanagan.* JavaScript: The Definitive Guide: The Definitive Guide. "O'Reilly Media, Inc.". 17 August 2006. səh. 16. ISBN 978-0-596-55447-7. 1 August 2020 tarixində arxivləşdirilib. İstifadə tarixi: 11 November 2019.
14. ↑  *Bernhardt, Gary.* Wat. CodeMash 2012. Destroy All Software. 2019-10-28 tarixində arxivləşdirilib. İstifadə tarixi: 2021-08-18.
15. ↑  *Gilbertson, Scott.* "Jokes for Nerds: Wat Moments in Programming". Wired. 26 January 2012. 23 August 2020 tarixində arxivləşdirilib. İstifadə tarixi: 22 August 2021.
16. ↑  "JavaScript data types and data structures – JavaScript | MDN". Developer.mozilla.org. 2017-02-16. 2017-03-14 tarixində arxivləşdirilib. İstifadə tarixi: 2017-02-24.
17. ↑  "ECMAScript Language – test262". Test262.ecmascript.org. 2011-05-14 tarixində orijinalından arxivləşdirilib. İstifadə tarixi: 2013-10-31.
18. ↑  "tc39/test262". GitHub. January 24, 2020. October 1, 2019 tarixində arxivləşdirilib. İstifadə tarixi: January 29, 2020.
19. ↑  "ECMAScript 5 compatibility table". kangax.github.io (ingilis). 2018-11-19 tarixində arxivləşdirilib. İstifadə tarixi: 2018-11-08.
20. ↑  "ECMAScript 6 compatibility table". kangax.github.io (ingilis). 2018-11-17 tarixində arxivləşdirilib. İstifadə tarixi: 2018-11-08.
21. 1 2  "ECMAScript 2016+ compatibility table". kangax.github.io (ingilis). 2018-11-24 tarixində arxivləşdirilib. İstifadə tarixi: 2018-11-08.
22. ↑  ES7-dən növbəti nəşr qaralamalarına qədər yeni funksiyaları özündə birləşdirən kompozit xal
23. ↑  *Guo, Shu-yu.* "ECMAScriptÂŽ 2022 Language Specification". tc39.es. Tc39.es. 2022-02-14. 2020-05-08 tarixində arxivləşdirilib. İstifadə tarixi: 2022-02-14.

Xarici keçidlər
---------------

* ecma-international.org — ECMAScript rəsmi saytı

| ⛭ECMAScript |
| --- |
| Dialektlər | 
* ActionScript
* Caja
* JavaScript
	+ mühərriklər
	+ asm.js
* JScript
* JScript .NET
* QtScript
* TypeScript
* WMLScript

 |
| Mühərriklər(müqayisə) | 
* Carakan
* Futhark
* InScript
* JavaScriptCore
* JScript
* KJS
* Linear B
* QtScript
* Rhino
* SpiderMonkey
	+ TraceMonkey
	+ JägerMonkey
* Tamarin
* V8
* ChakraCore
	+ Chakra
* JScript .NET
* Nashorn

 |
| Freymvorklar | 

|  |  |
| --- | --- |
| Client-side | 
* Dojo
* Echo
* Ext JS
* Google Web Toolkit
* jQuery
* Lively Kernel
* midori
* MochiKit
* MooTools
* Prototype
* Pyjs
* qooxdoo
* SproutCore
* Spry
* Wakanda Framework

 |
| Server-side | 
* AppJet
* Bun
* Deno
* Jaxer
* Node.js
* WakandaDB

 |
| Çoxsaylı | 
* Cappuccino
* PureMVC

 |
| Kitabxanalar | 
* Backbone.js
* SWFObject
* Underscore.js

 |

 |
| İnsanlar | 
* Brendan Eyx
* Duqlas Krokford
* Con Resiq
* Skot İsaak

 |
| Digər | 
* DHTML
* Ecma International
* JSDoc
* JSGI
* JSHint
* JSLint
* JSON
* JSSS
* Sputnik
* SunSpider
* Asinxron modul təyinatı
* CommonJS

 |
| 
List-Class article Siyahılar
JavaScript kitabxanaları
Ajax freymvorkları
List-Class article Müqayisələr
JavaScript freymvorkları
server-side JavaScript
 |