Back # Assignment Operators

An **assignment operator** assigns a value to its left operand based on the value of its right operand.

The basic assignment operator is equal (`=`

), which assigns the value of its right operand to its left operand. That is, `x = y`

assigns the value of `y`

to `x`

. The other assignment operators are usually shorthand for standard operations, as shown in the following definitions and examples.

Simple assignment operator which assigns a value to a variable. Chaining the assignment operator is possible in order to assign a single value to multiple variables. See the example.

Operator:x = y

// Assuming the following variables // x = 5 // y = 10 // z = 25 x = y // x is 10 x = y = z // x, y and z are all 25

The addition assignment operator **adds** the value of the right operand to a variable and assigns the result to the variable. The types of the two operands determine the behavior of the addition assignment operator. Addition or concatenation is possible. See the **addition operator** for more details.

Operator:x += yMeaning:x = x + y

// Assuming the following variables // foo = "foo" // bar = 5 // baz = true // Number + Number -> addition bar += 2 // 7 // Boolean + Number -> addition baz += 1 // 2 // Boolean + Boolean -> addition baz += false // 0 // Number + String -> concatenation bar += "foo" // "5foo" // String + Boolean -> concatenation foo += false // "foofalse" // String + String -> concatenation foo += "bar" // "foobar"

The subtraction assignment operator **subtracts** the value of the right operand from a variable and assigns the result to the variable. See the **subtraction operator** for more details.

Operator:x -= yMeaning:x = x - y

// Assuming the following variable // bar = 5 bar -= 2 // 3 bar -= "foo" // NaN

The multiplication assignment operator **multiplies** a variable by the value of the right operand and assigns the result to the variable. See the **multiplication operator** for more details.

Operator:x *= yMeaning:x = x * y

// Assuming the following variable // bar = 5 bar *= 2 // 10 bar *= "foo" // NaN

The division assignment operator **divides** a variable by the value of the right operand and assigns the result to the variable. See the **division operator** for more details.

Operator:x /= yMeaning:x = x / y

// Assuming the following variable // bar = 5 bar /= 2 // 2.5 bar /= "foo" // NaN bar /= 0 // Infinity

The remainder assignment operator **divides** a variable by the value of the right operand and assigns the **remainder** to the variable. See the **remainder operator** for more details.

Operator:x %= yMeaning:x = x % y

// Assuming the following variable // bar = 5 bar %= 2 // 1 bar %= "foo" // NaN bar %= 0 // NaN

[ECMAScript 2016 (ES7) proposal]

The exponentiation assignment operator returns the result of raising first operand to the **power** second operand. See the **exponentiation operator** for more details.

Operator:x **= yMeaning:x = x ** y

// Assuming the following variable // bar = 5 bar **= 2 // 25 bar **= "foo" // NaN

The left shift assignment operator moves the specified amount of bits to the left and assigns the result to the variable. See the **left shift operator** for more details.

Operator:x <<= yMeaning:x = x << y

var bar = 5; // (00000000000000000000000000000101) bar <<= 2; // 20 (00000000000000000000000000010100)

The right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the **right shift operator** for more details.

Operator:x >>= yMeaning:x = x >> y

var bar = 5; // (00000000000000000000000000000101) bar >>= 2; // 1 (00000000000000000000000000000001) var bar -5; // (-00000000000000000000000000000101) bar >>= 2; // -2 (-00000000000000000000000000000010)

The unsigned right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the ** unsigned right shift operator** for more details.

Operator:x >>>= yMeaning:x = x >>> y

var bar = 5; // (00000000000000000000000000000101) bar >>>= 2; // 1 (00000000000000000000000000000001) var bar = -5; // (-00000000000000000000000000000101) bar >>>= 2; // 1073741822 (00111111111111111111111111111110)

The bitwise AND assignment operator uses the binary representation of both operands, does a bitwise AND operation on them and assigns the result to the variable. See the **bitwise AND operator** for more details.

Operator:x &= yMeaning:x = x & y

var bar = 5; // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 bar &= 2; // 0

The bitwise XOR assignment operator uses the binary representation of both operands, does a bitwise XOR operation on them and assigns the result to the variable. See the **bitwise XOR operator** for more details.

Operator:x ^= yMeaning:x = x ^ y

var bar = 5; bar ^= 2; // 7 // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 // ----------------------------------- // 7: 00000000000000000000000000000111

The bitwise OR assignment operator uses the binary representation of both operands, does a bitwise OR operation on them and assigns the result to the variable. See the **bitwise OR operator** for more details.

Operator:x |= yMeaning:x = x | y

var bar = 5; bar |= 2; // 7 // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 // ----------------------------------- // 7: 00000000000000000000000000000111

In unusual situations, the assignment operator (e.g.` x += y`

) is not identical to the meaning expression (here `x = x + y`

). When the left operand of an assignment operator itself contains an assignment operator, the left operand is evaluated only once. For example:

a[i++] += 5 // i is evaluated only once a[i++] = a[i++] + 5 // i is evaluated twice

Created by Mozilla Contributors, license: CC-BY-SA 2.5