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.

Object Model

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 ()  ← Root of DOM
│   │   │   ├── head ()
│   │   │   │   ├── title ()
│   │   │   │   ├── meta () 
│   │   │   │   ├── link ()
│   │   │   │   ├── style ()
│   │   │   │   ├── script ()
│   │   │   │   ├── noscript ()
│   │   │   │   └── template ()
│   │   │   │   
│   │   │   └── body ()
│   │   │       ├── header ()
│   │   │       ├── nav ()
│   │   │       ├── main ()
│   │   │       ├── section ()
│   │   │       ├── article ()
│   │   │       ├── aside ()
│   │   │       ├── footer ()
│   │   │       └── div ()
│   │   │           ├── p ()
│   │   │           ├── span ()
│   │   │           ├── a ()     
│   │   │           ├── img ()
│   │   │           ├── ul ()
│   │   │           │   └── li ()
│   │   │           ├── ol ()
│   │   │           │   └── li ()
│   │   │           ├── table ()
│   │   │           │   ├── thead ()
│   │   │           │   │   └── tr ()
│   │   │           │   │       ├── th ()
│   │   │           │   │       └── td ()
│   │   │           │   ├── tbody ()
│   │   │           │   │   └── tr ()
│   │   │           │   │       ├── th ()
│   │   │           │   │       └── td ()
│   │   │           │   └── tfoot ()
│   │   │           ├── form ()
│   │   │           │   ├── input ()
│   │   │           │   ├── textarea ()
│   │   │           │   ├── select ()
│   │   │           │   │   └── option ()
│   │   │           │   └── button ()
│   │   │           ├── script ()
│   │   │           ├── iframe ()
│   │   │           ├── video ()
│   │   │           │   └── source ()
│   │   │           ├── audio ()
│   │   │           │   └── source ()
│   │   │           ├── canvas ()
│   │   │           └── svg ()
│   │   │
│   │   ├── location (document.location.href)
│   │   ├── getElementById()
│   │   ├── getElementsByClassName()
│   │   ├── querySelector()
│   │   ├── querySelectorAll()
│   │   ├── createElement()
│   │   ├── appendChild()
│   │   ├── removeChild()
│   │   ├── replaceChild()
│   │   └── cloneNode()
│   │
│   ├── Nodes
│   │   ├── Element Nodes (, , , 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') 

## 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.
```javascript
// ES5
var x = 1;

// ES6+
const y = 10; // Cannot be reassigned
let t = 5; // Can be reassigned
```

## 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.

```javascript
function sayHi() {
    let name = prompt("What's your name?"); 
    // This name is saved to a variable
    
    alert("Hello " + name);
    // Whatever the name is, the browser alerts "Hello (name)"
}

sayHi(); // Runs the function sayHi

/*  
    This is also a comment,
    but it can span multiple lines.
*/
```

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

If you want to put JavaScript in your HTML, you put it between an opening `&lt;script&gt;` and closing `&lt;/script&gt;` 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:

```html5

    Example page
     // This is the script tag

    for (let counter = 1; counter ";
        
        /*
            This puts the number, then a new line element (),
            at the end of the web page.
        */
        
    }

    // End javascript:
    

```

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
function sayHi() {
    alert("Hi!");
}

sayBye = function() {
    alert("Bye!");
}

sayHi();
sayBye();
```

* 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

## References
## 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.