Variables are declared with the var keyword. JavaScript is dynamically typed so every variable can hold a value of any data type.

Variables can be declared without an initial value.

Some example declarations:

//var foo;var bar = 42;var foo, bar, baz;var foo = 42,
    bar = 'baz',
    z;

Variables that don't explicitly get assigned an initial value have the value undefined.

**ES2015**

Since ES2015, let and const can be used in addition to var. We will learn how they differ from var later. For now, lets have a look how const differs from var or let: const can be assigned a value only once (constant).
Reassigning a value will either throw an error (in strict mode, see below) or is silently ignored:

//const foo = 42;
foo = 21; // error or ignored

consts must be initialized with a value:

//const foo; // error
foo = 42;

Variable names

Valid characters for variable names include a wide range of unicode characters. However, the name must start with a letter, _ or $. Not doing so will result in a syntax error.

Examples:

//var π = 3.141;var _foo = π;var 0_bar = '...'; // Syntax error

Variable access

Trying to read an undeclared variable results in a runtime error:

//var foo;
console.log(bar); // ReferenceError: bar is not defined.

However, writing to an undeclared variable is valid by default. It will create an implicit global variable and should thus be avoided:


//function foo() {
    bar = 42;}foo();
console.log(bar); // no error

If code runs in strict mode, assigning to an undeclared variable throws an error.

Strict mode

Strict mode is a mode of evaluating JavaScript that enforces stricter rules. It was introduced to "deprecate" certain patterns/behaviors that are considered bad or confusing.

Strict mode can be enabled for a JavaScript or a function by putting

//'use strict';

at the beginning of it.

JavaScript has 6 data types. Five of those are so called primitive data types:

  • Boolean
  • Number
  • String
  • Null
  • Undefined

Everything else that is not a value of one of the above types is an

  • Object

As we will see in the following slides, objects belong to different kinds of "classes" of objects.

**ES2015**

ES2015 introduces a 6th primitive data type: [Symbol][]. Symbols are unique and immutable values.