ECMAScript: Difference between revisions

Content deleted Content added
Fix grammar in lead
m Reverting possible vandalism by 41.45.154.190 to version by MSWS. Report False Positive? Thanks, ClueBot NG. (4412224) (Bot)
 
(12 intermediate revisions by 11 users not shown)
Line 5:
| designer = [[Brendan Eich]], [[Ecma International]]
| typing = [[weak typing|weak]], [[dynamic typing|dynamic]]
| implementations = [[JavaScript]], [[ActionScript]], [[JScript]], [[QtScript]], [[InScript (JavaScript engine)|InScript]], [[Google Apps Script]]
| website = {{URL|https://www.ecma-international.org/publications-and-standards/standards/ecma-262/}}
| year = {{Start date and age|1997}}
Line 48:
|archive-url = https://web.archive.org/web/20160610005241/https://books.google.com/books?id=WTZqecc9olUC
|url-status = live
}}</ref> is a standard for scripting languages, including [[JavaScript]], [[JScript]], and [[ActionScript]]. It is best known as a JavaScript standard intended to ensure the [[interoperability]] of [[web page]]s across different [[web browser]]s.<ref>{{cite journal |last1=Wirfs-Brock |first1=Allen |last2=Eich |first2=Brendan |date=2020-05-02 |title=JavaScript: The First 20 Years |journal=Proceedings of the ACM on Programming Languages |volume=4 |issue=HOPL |pages=1–189 |doi=10.1145/3386327 |doi-access=free |s2cid=219603695}}</ref> It is standardized by [[Ecma International]] in the document [https://www.ecma-international.org/publications-and-standards/standards/ecma-262/ ECMA-262].
 
ECMAScript is commonly used for [[client-side scripting]] on the [[World Wide Web]], and it is increasingly being used for server-side applications and services using runtime environments such as [[Node.js]],<ref>{{cite web | last=Wunder|first=C.|url=https://nodejs.org/en/docs/es6 | title=Node.js — ECMAScript 2015 (ES6) and beyond |website=Node.js}}</ref> [[Deno (software)|denoDeno]]<ref>{{cite web | url=https://www.infoworld.com/article/3644460/deno-joins-javascript-standards-effort.html | title=Deno joins JavaScript standards effort | date=14 December 2021 }}</ref> and [[Bun (software)|bunBun]].<ref>https://bun.sh/docs#:~:text=or%2C%20more%20formally%2C-,ECMAScript,-)%20is%20just%20a bun</ref>
 
== ECMAScript, ECMA-262, JavaScript ==
'''ECMA-262''', or the ''ECMAScript Language Specification'', defines the ''ECMAScript Language'', or just '''ECMAScript'''.<ref>{{cite web |last=Guo |first=Shu-yu |date=2022-02-14 |title=ECMAScriptÂŽ 2022 Language Specification |url=https://tc39.es/ecma262/ |url-status=live |archive-url=https://web.archive.org/web/20200508053013/https://tc39.es/ecma262/ |archive-date=2020-05-08 |website=tc39.es |accessdate=2022-02-14}}</ref> ECMA-262 specifies only language syntax and the semantics of the core application programming interface ([[API]]), such as {{mono|Array}}, {{mono|Function}}, and {{mono|globalThis}}, while valid implementations of JavaScript add their own functionality such as [[input/output]] and [[File manager|file system]] handling.
 
== History==
Line 69:
 
=== Imperative and structured ===
ECMAScript JavaScript<!-- How to make clearer? --> supports [[C (programming language)|C]]-style structured programming. Previously, JavaScript only supported [[Scope (computer science)|function scoping]] using the keyword <code>var</code>, but ECMAScript 2015 added the keywords <code>let</code> and <code>const</code>, allowing JavaScript to support both block scoping and function scoping. JavaScript supports [[automatic semicolon insertion]], meaning that semicolons that normally terminate a statement in C may be omitted in JavaScript.<!-- Might imply EMCAScript doesn't support automatic semicolon insertion --><ref name="Flanagan2006">{{cite book|url=https://books.google.com/books?id=2weL0iAfrEMC|title=JavaScript: The Definitive Guide: The Definitive Guide|authorfirst=David |last=Flanagan|edition=5th|date=17 August 2006|publisher="O'Reilly Media, Inc."|isbn=978-0-596-5544710199-72|page=16|access-date=11 November 2019|archive-date=1 August 2020|archive-url=https://web.archive.org/webdetails/20200801065235/https://books.google.com/books?id=2weL0iAfrEMCjavascriptdefini0000flan|url-statusaccess=liveregistration}}</ref>
 
Like C-style languages, [[control flow]] is done with the {{Code|code=while}}, {{Code|code=for}}, {{Code|code=do}} / {{Code|code=while}}, {{Code|code=if}} / {{Code|code=else}}, and {{Code|code=switch}} statements.<!-- missing Labels / Functions --> Functions are weakly typed and may accept and return any type. Arguments not provided default to {{Code|code=undefined}}.
 
=== Weakly typed ===
ECMAScript is [[weakly typed]]. This means that certain types are assigned implicitly based on the operation being performed. However, there are several quirks in JavaScript's implementation of the conversion of a variable from one type to another. These quirks have been the subject of a <!-- humorous --> talk entitled ''Wat''.<ref>{{cite conference |last1=Bernhardt |first1=Gary |title=Wat |url=https://www.destroyallsoftware.com/talks/wat |website=Destroy All Software |conference=CodeMash 2012 |access-date=2021-08-18 |archive-date=2019-10-28 |archive-url=https://web.archive.org/web/20191028204723/https://www.destroyallsoftware.com/talks/wat |url-status=live }}</ref><ref>{{cite magazine |last1=Gilbertson |first1=Scott |title=Jokes for Nerds: Wat Moments in Programming |url=https://www.wired.com/2012/01/jokes-for-nerds-wat-moments-in-programming/ |access-date=22 August 2021 |magazine=Wired |date=26 January 2012 |archive-date=23 August 2020 |archive-url=https://web.archive.org/web/20200823123837/https://www.wired.com/2012/01/jokes-for-nerds-wat-moments-in-programming/ |url-status=live }}</ref>
 
=== Dynamic ===