JavaScript uses the =
operator to assign a value to a variable or property. For
example:
i
=
0
// Set the variable i to 0.
o
.
x
=
1
// Set the property x of object o to 1.
The =
operator expects its
left-side operand to be an lvalue: a variable or object property (or
array element). It expects its right-side operand to be an arbitrary
value of any type. The value of an assignment expression is the value
of the right-side operand. As a side effect, the =
operator assigns the value on the right to
the variable or property on the left so that future references to the
variable or property evaluate to the value.
Although assignment expressions are usually quite simple, you may sometimes see the value of an assignment expression used as part of a larger expression. For example, you can assign and test a value in the same expression with code like this:
(
a
=
b
)
==
0
If you do this, be sure you are clear on the difference between
the =
and ==
operators! Note that =
has very low precedence and parentheses
are usually necessary when the value of an assignment is to be used in
a larger expression.
The assignment operator has right-to-left associativity, which means that when multiple assignment operators appear in an expression, they are evaluated from right to left. Thus, you can write code like this to assign a single value to multiple variables:
i
=
j
=
k
=
0
;
// Initialize 3 variables to 0
Besides the normal =
assignment operator, JavaScript supports a number of other
assignment operators that provide shortcuts by combining assignment
with some other operation. For example, the +=
operator performs addition and
assignment. The following expression:
total
+=
sales_tax
is equivalent to this one:
total
=
total
+
sales_tax
As you might expect, the +=
operator works for numbers or strings. For numeric operands, it
performs addition and assignment; for string operands, it performs
concatenation and assignment.
Similar operators include -=
, *=
,
&=
, and so on. Table 4-3 lists them all.
Table 4-3. Assignment operators
Operator | Example | Equivalent |
---|---|---|
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
<<= | a <<=
b | a = a <<
b |
>>= | a >>=
b | a = a >>
b |
>>>= | a >>>=
b | a = a >>>
b |
&= | a &= b | a = a &
b |
|= | a |= b | a = a | b |
^= | a ^= b | a = a ^ b |
In most cases, the expression:
a
op
=
b
where op
is an operator, is
equivalent to the expression:
a
=
a
op
b
In the first line, the expression a
is evaluated once. In the second it is
evaluated twice. The two cases will differ only if a
includes side effects such as a function
call or an increment operator. The following two assignments, for
example, are not the same:
data
[
i
++
]
*=
2
;
data
[
i
++
]
=
data
[
i
++
]
*
2
;
Get JavaScript: The Definitive Guide, 6th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.