# Expressions And Operators: Assignment

The assignment operator `=` assigns the value of the right-hand operand to the left-hand operand. For example:

``````\$a = 10;
``````

## Element Assignment

We can assign to array elements, as follows:

``````\$v = vec[1, 2, 3];

\$v[0] = 42; // \$v is now vec[42, 2, 3]

\$v = dict[0 => 10, 1 => 20, 2 => 30];
\$v[1] = 22;     // change the value of the element with key 1
\$v[-10] = 19;   // insert a new element with key -10
``````

For `vec` and `varray`, indexes must be within the range of the existing values. Use `\$v[] = new_value;` to append new values.

For a `dict` or a `darray`, we can insert at arbitrary keys.

``````\$d = dict['x' => 1];
\$d['y'] = 42; // \$d is now dict['x' => 1, 'y' => 42]
``````

Strings can also be assigned like arrays. However, it is possible to assign beyond the end of the string. The string will be extended with spaces as necessary.

``````\$s = "ab";
\$s[0] = "x"; // in bounds
\$s[3] = "y"; // \$s is now "xb y"
``````

## Compound Assignments

Infix operators in Hack have a corresponding compound assignment operator. For example, `+` has compound assignment operator `+=`.

``````\$x += 10;

// Equivalent to:
\$tmp = \$x + 10;
\$x = \$tmp;
``````

The complete set of compound-assignment operators is: `**=`, `*=`, `/=`, `%=`, `+=`, `-=`, `.=`, `<<=`, `>>=`, `&=`, `^=`, `|=`, and `??=`.