JavaScript

**JavaScript** is a high-level programming language that follows the ECMAScript standard. It was originally designed as a scripting language for websites but became widely adopted as a general-purpose programming language, and is currently the most popular programming language in use. JavaScript is usually found running in a web browser as interactive or automated content, ranging from popup messages and live clocks to large web applications. JavaScript is also commonly used in server-side programming through platforms like Node.js, or "embedded" in non-JavaScript applications where the base programming language lacks the high-level functionality that JavaScript offers.

Despite the similarities in name and syntax, JavaScript is not related to the programming language Java. Though the names of both languages are trademarks of Oracle Corporation, the two languages follow different design principles, and are actively developed by unrelated organizations.

<big>Object Model</big><pre>

window (Global Object)
│
├── BOM (Browser Object Model)
│   ├── location
│   │   ├── href
│   │   ├── hostname
│   │   ├── pathname
│   │   ├── protocol
│   │   ├── assign()
│   │   ├── reload()
│   │   └── replace()
│   │
│   ├── navigator
│   │   ├── userAgent
│   │   ├── language
│   │   ├── platform
│   │   └── geolocation
│   │
│   ├── history
│   │   ├── length
│   │   ├── back()
│   │   ├── forward()
│   │   └── go()
│   │
│   ├── screen
│   │   ├── width
│   │   ├── height
│   │   ├── availWidth
│   │   └── availHeight
│   │
│   ├── console
│   │   ├── log()
│   │   ├── error()
│   │   ├── warn()
│   │   └── info()
│   │
│   ├── alert()
│   ├── prompt()
│   ├── confirm()
│   ├── open()
│   └── close()
│
├── DOM (Document Object Model)
│   ├── document
│   │   ├── documentElement (<html>)  ← Root of DOM
│   │   │   ├── head (<head>)
│   │   │   │   ├── title (<title>)
│   │   │   │   ├── meta (<meta>)
│   │   │   │   ├── link (<link>)
│   │   │   │   ├── style (<style>)
│   │   │   │   ├── script (<script>)
│   │   │   │   ├── noscript (<noscript>)
│   │   │   │   └── template (<template>)
│   │   │   │
│   │   │   └── body (<body>)
│   │   │       ├── header (<header>)
│   │   │       ├── nav (<nav>)
│   │   │       ├── main (<main>)
│   │   │       ├── section (<section>)
│   │   │       ├── article (<article>)
│   │   │       ├── aside (<aside>)
│   │   │       ├── footer (<footer>)
│   │   │       └── div (<div>)
│   │   │           ├── p (<p>)
│   │   │           ├── span (<span>)
│   │   │           ├── a (<a>)
│   │   │           ├── img (<img>)
│   │   │           ├── ul (<ul>)
│   │   │           │   └── li (<li>)
│   │   │           ├── ol (<ol>)
│   │   │           │   └── li (<li>)
│   │   │           ├── table (<table>)
│   │   │           │   ├── thead (<thread>)
│   │   │           │   │   └── tr (<tr>)
│   │   │           │   │       ├── th (<th>)
│   │   │           │   │       └── td (<td>)
│   │   │           │   ├── tbody (<tbody>)
│   │   │           │   │   └── tr (<tr>)
│   │   │           │   │       ├── th (<th>)
│   │   │           │   │       └── td (<td>)
│   │   │           │   └── tfoot (<tfoot>)
│   │   │           ├── form (<form>)
│   │   │           │   ├── input (<input>)
│   │   │           │   ├── textarea (<textarea>)
│   │   │           │   ├── select (<select>)
│   │   │           │   │   └── option (<option>)
│   │   │           │   └── button (<button>)
│   │   │           ├── script (<script>)
│   │   │           ├── iframe (<iframe>)
│   │   │           ├── video (<video>)
│   │   │           │   └── source (<source>)
│   │   │           ├── audio (<audio>)
│   │   │           │   └── source (<source>)
│   │   │           ├── canvas (<canvas>)
│   │   │           └── svg (<svg>)
│   │   │
│   │   ├── location (document.location.href)
│   │   ├── getElementById()
│   │   ├── getElementsByClassName()
│   │   ├── querySelector()
│   │   ├── querySelectorAll()
│   │   ├── createElement()
│   │   ├── appendChild()
│   │   ├── removeChild()
│   │   ├── replaceChild()
│   │   └── cloneNode()
│   │
│   ├── Nodes
│   │   ├── Element Nodes (<div>, <p>, <img>, etc.)
│   │   ├── Text Nodes (Text inside elements)
│   │   ├── Comment Nodes ()
│   │   └── Attribute Nodes (Element attributes)
│   │
│   ├── Events
│   │   ├── click
│   │   ├── keydown
│   │   ├── mousemove
│   │   ├── load
│   │   ├── focus
│   │   ├── blur
│   │   ├── submit
│   │   └── change
│   │
│   ├── Storage
│   │   ├── localStorage
│   │   ├── sessionStorage
│   │   └── cookies (document.cookie)
│   │
│   ├── Shadow DOM
│   │   ├── attachShadow()
│   │   └── shadowRoot
│   │
│   ├── Custom Elements
│   │   ├── define()
│   │   └── observedAttributes
│   │
│   └── Web APIs
│       ├── fetch()
│       ├── XMLHttpRequest
│       ├── WebSockets
│       ├── IndexedDB
│       ├── Service Workers
│       └── WebRTC
│
└── CSSOM (CSS Object Model)
    ├── document.styleSheets  ← List of all stylesheets
    │   └── CSSStyleSheet  ← Represents a single stylesheet
    │       ├── cssRules / rules  ← All CSS rules inside a stylesheet
    │       │   ├── CSSRule
    │       │   ├── CSSStyleRule
    │       │   ├── CSSMediaRule (@media queries)
    │       │   ├── CSSImportRule (@import)
    │       │   ├── CSSFontFaceRule (@font-face)
    │       │   ├── CSSSupportsRule (@supports)
    │       │   ├── CSSNamespaceRule (@namespace)
    │       │   ├── CSSPageRule (@page)
    │       │   ├── CSSKeyframesRule (@keyframes)
    │       │   ├── CSSKeyframeRule (Individual keyframe inside @keyframes)
    │       │   ├── CSSCounterStyleRule (@counter-style)
    │       │   └── CSSPropertyRule (@property)
    │       ├── insertRule("rule", index)
    │       └── deleteRule(index)
    │
    ├── getComputedStyle(element)
    │   ├── getPropertyValue('property')
    │   ├── color
    │   ├── font-size
    │   ├── background-color
    │   ├── display
    │   ├── position
    │   ├── z-index
    │   ├── opacity
    │   ├── transform
    │   ├── transition
    │   ├── animation
    │   └── visibility
    │
    ├── element.style
    │   ├── setProperty('property', 'value')
    │   ├── removeProperty('property')
    │   ├── color
    │   ├── fontSize
    │   ├── backgroundColor
    │   ├── display
    │   ├── position
    │   ├── transform
    │   ├── transition
    │   ├── animation
    │   └── visibility
    │
    ├── CSSStyleDeclaration  ← Represents all styles of an element
    │   ├── length
    │   ├── item(index)
    │   ├── getPropertyValue('property')
    │   ├── setProperty('property', 'value', 'priority')
    │   └── removeProperty('property')
    │
    └── CSS Variables (Custom Properties)
         ├── document.documentElement.style.setProperty('--var', 'value')
         ├── element.style.getPropertyValue('--var')
         ├── element.style.removeProperty('--var')
         └── getComputedStyle(element).getPropertyValue('--var')

</pre>

## Use

JavaScript is typically inserted into HTML when used on the web, either directly in the file in an HTML tag, or linked to a separate file containing the script.

JavaScript, as a full featured scripting language, can be used to provide functionality to a website. Examples include:

- Using AJAX in order to load content without refreshing the website.
- Changing HTML through the Document Object Model
- Changing CSS
- Validating inputs of forms and sending them.
- Tracking users as they move throughout the website.

### Frameworks

A majority of websites use what is known as a framework. Frameworks may allow programming to be easier as more predefined procedures are defined within it. Such a library is jQuery.

### Video Games

JavaScript can be used to create and run video games in the browser. The modern web has quickly become a viable platform for creating and distributing high-quality games. With modern web technologies and a recent browser, it’s entirely possible to make stunning, top-notch games for the web. JavaScript is blazing fast in modern browsers and getting faster all the time. You can use its power to write the code for your game or look at using technologies like Emscripten or Asm.js to easily port your existing games.

There are also many widely adopted game engines that you can use to develop games with JavaScript and HTML5. Some popular ones include Three.js, Pixi.js, Phaser, Babylon.js, Matter.js, and PlayCanvas. These game engines provide a range of features and tools to help you create sophisticated 2D and 3D graphics without relying on third-party plugins.

### Beyond web browsers

JavaScript is also used outside of web browsers. As a scripting language, JavaScript can be used to define the behaviour of applications such as extensions in GNOME Shell.

In addition, there are runtime environments for running JavaScript as a server side programming language. Such an environment is Node.js.

Electron is a framework which allows graphical applications to be made with web technologies, by running on the Chromium browser and Node.js.

## Syntax

A JavaScript program is made of a collection of instructions called "statements". A semicolon marks the end of a statement, and allows multiple statements to be placed on the same line. However, it is typical to write each statement on its own line to keep a program file readable.

Variables can be defined in several ways. In an older version named "ES5", variables are defined using the `var` keyword. In the newer versions after ES5, variables can be defined using `const` for constant variables and `let` for local variables. The value of constant variables cannot be re-declared or reassigned. Variables assigned using `const` or `let` are contained within blocks, while variables assigned using `var` are contained within functions.

## Examples

The script below prints "Example" on the screen. The lines that start with `//` are comments, which are used to describe the actions of the program.

The code above alerts `"Hello " + name`.

If you want to put JavaScript in your HTML, you put it between an opening `<script>` and closing `</script>` tag. These tags mean that whatever is between them is a script and not text to be put onto the web page. The script below inserts the numbers 1 through 10 at the bottom of a webpage:

The `for()` loop makes whatever code is between the `{` and the `}` happen more than one time. In this case, it keeps looping until `numOfTimesAround` is equal to 10, then it stops. This means it equals ten. It's a bit confusing at first, but it works.

## Differences between Java and Javascript

- In Java, to define a variable, you have to say what type of variable it is: a number, a word, a letter, or more. In JavaScript, this is not necessary.
- In JavaScript, functions are stored as variables (unlike Java). This makes the following code okay in JavaScript:

- JavaScript is interpreted, but Java, in most cases, must be compiled. This means that JavaScript needs to be run by another computer program (an interpreter), but finished Java can be run as its own program.

## Related pages

- HTML
- Ajax (programming)
- Java (programming language)
- TypeScript

## Other websites

- Learn JavaScript  on the Mozilla Developer Center
- Mozilla's Official Documentation on JavaScript
- Video - Firefox 2 and Javascript with Mozilla Corp and JavaScript creator Brendan Eich
- References for Core JavaScript versions: 1.5
- New in JavaScript: 1.7 , 1.6
- List of JavaScript releases: versions 1.0 - 1.7
- Brendan's Roadmap Updates: JavaScript 1, 2, and in between  - the author's blog entry
- comp.lang.javascript FAQ  Official FAQ for the comp.lang.javascript Usenet group
- RFC 4329, a document for the registration of media types related to ECMAScript and JavaScript. The current recommendations are "application/javascript" and "application/ecmascript", although neither is recognized by Internet Explorer.

## Infobox (programming language)

- **title**: JavaScript
- **released**: 4 December 1995
- **designer**: Brendan Eich
- **developer**: Netscape
- **logo**:
- **logo alt**: Unofficial JavaScript Logo
- **programming language**: Scripting and programming language
- **file extensions**: `.js` (Standard JavaScript)

`.mjs` `.cjs` `.jsx` `.tsx` `.ts` `.es6`

`.json` (JavaScript Object Notation)