# table of operators

[JS](/web/js.md) ⟩ [statement](/web/js/grammar/statement.md) ⟩ [expression](/web/js/grammar/statement/expr.md) ⟩ [operator](/web/js/grammar/op.md) ⟩ table of operators

{% tabs %}
{% tab title="⭐️ 重點" %}
{% hint style="info" %}
[**property access**](/web/js/val/obj/prop/access/property-access-expression.md) and [**invocation**](/web/js/grammar/statement/expr/invoke.md) expressions have <mark style="color:red;">**higher**</mark>**&#x20;**<mark style="color:yellow;">**precedence**</mark> <mark style="color:yellow;">**than**</mark> <mark style="color:red;">**any**</mark> of the <mark style="color:purple;">**operators**</mark>.
{% endhint %}
{% endtab %}

{% tab title="👥 相關" %}

* [short-circuiting](/web/js/grammar/op/term/short-circuiting.md)
  {% endtab %}

{% tab title="📗 參考" %}

* [ ] [JavaScript: The Definitive Guide](/web/master/ref/javascript-the-definitive-guide.md) ⟩ 4.7 Operator Overview
  {% endtab %}

{% tab title="📘 手冊" %}

* [Operator precedence](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) ⟩&#x20;
  * [operator precedence table ⭐️ ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#table)
  * [short-circuiting](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#short-circuiting)&#x20;
* [Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators)
  {% endtab %}

{% tab title="❓" %}
{% hint style="warning" %} <mark style="color:red;">**問：**</mark>「 Why <mark style="color:blue;">**`a && b`**</mark> is (any, any) -> <mark style="color:red;">**any**</mark> 」❓

<mark style="color:green;">答：</mark>「 because it <mark style="color:yellow;">**returns**</mark>**&#x20;**<mark style="color:blue;">**a**</mark> if <mark style="color:blue;">**a**</mark> is [**falsy**](/web/js/val/type/falsy.md), otherwise returns <mark style="color:blue;">**b**</mark>. 」
{% endhint %}
{% endtab %}
{% endtabs %}

{% hint style="success" %}

* <mark style="color:red;">**P**</mark>：<mark style="color:red;">**precedence**</mark>,   <mark style="color:yellow;">**A**</mark>：<mark style="color:yellow;">**association**</mark>,   <mark style="color:green;">**N**</mark>：<mark style="color:green;">**number of operands**</mark> (arity)
* <mark style="color:blue;">**lval**</mark>：[lvalue](/web/js/grammar/op/term/lvalue.md), n：[num](/web/js/val/prim/num.md), s：str, i：int, o：obj, f：func, b：bool, <mark style="color:red;">**a**</mark>：<mark style="color:red;">**any**</mark>
  {% endhint %}

<table><thead><tr><th width="76" data-type="number">P</th><th width="123">Operator</th><th width="265">Operation</th><th width="78">A<select><option value="4d3130aa22c342978df41d7124fe9c31" label="R" color="blue"></option><option value="fcb74ebed1c14940aef92e6a2aeab8fd" label="L" color="blue"></option><option value="387ca1ae753e4fc3af85896e6944a0b4" label="🈚" color="blue"></option></select></th><th width="78" data-type="number">N</th><th>Types</th></tr></thead><tbody><tr><td>18</td><td>( ... )</td><td><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Grouping">Grouping</a></td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>17</td><td>obj . prop</td><td><a href="/pages/ipqmz22rrnjxEq0EoNbE">property access</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>null</td><td></td></tr><tr><td>null</td><td>obj [ prop ]</td><td><a href="/pages/Qyf2Mf9ZVQEhF1fQOSvr">computed property access</a></td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>null</td><td><a href="/pages/bDJvSMKrPhthDCXzw82L">new F(args)</a></td><td><mark style="color:green;"><strong>with</strong></mark> argument list</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>null</td><td>f ( args )</td><td><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions">Function Call</a></td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>null</td><td>obj ?. prop</td><td><a href="/pages/fqCrGi7hQNdFnqMfCuEr">optional chaining</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>null</td><td></td></tr><tr><td>16</td><td><a href="/pages/bDJvSMKrPhthDCXzw82L">new F()</a></td><td><mark style="color:red;"><strong>without</strong></mark> argument list</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>15</td><td>++</td><td>post-increment</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>null</td><td>--</td><td>post-decrement</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>14</td><td><mark style="color:purple;"><strong><code>!</code></strong></mark></td><td><a href="/pages/qzCxyRuJFHlmay9CCHSB">logical</a> not</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td>bool -> bool</td></tr><tr><td>0</td><td><a href="/pages/odMgkvuV9nZXSpy9bBxF"><mark style="color:purple;"><strong><code>~</code></strong></mark></a></td><td>bitwise not (<a href="/pages/odMgkvuV9nZXSpy9bBxF">invert bits</a>) </td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td>int -> int</td></tr><tr><td>0</td><td><a href="/pages/yRS6JJK7xbpwWKBz6CQi"><mark style="color:purple;"><strong><code>+</code></strong></mark></a></td><td>unary + (<a href="/pages/2TzyNTqXO6ecSlixZydV">convert</a> to number)</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td><mark style="color:red;"><strong>any</strong></mark> -> num</td></tr><tr><td>0</td><td>-</td><td>unary - (negative)</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td>num -> num</td></tr><tr><td>0</td><td>++</td><td>pre-increment</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td><a href="/pages/EG5ZD5r4UlLJ6gr7fL7Y"><strong>lval</strong></a> -> num</td></tr><tr><td>0</td><td>--</td><td>pre-decrement</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td><a href="/pages/EG5ZD5r4UlLJ6gr7fL7Y"><strong>lval</strong></a> -> num</td></tr><tr><td>0</td><td><a href="/pages/57Az3CaIVSFVpcazUCiZ">typeof</a></td><td><a href="/pages/-MjWrsng_aY4U7OMLpdE">type</a> of operand</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td><mark style="color:red;"><strong>any</strong></mark> -> str</td></tr><tr><td>0</td><td><a href="/pages/D6pHlp5toUtXXl2CMj6d">delete</a></td><td><a href="/pages/D6pHlp5toUtXXl2CMj6d">delete</a> a property</td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td><a href="/pages/EG5ZD5r4UlLJ6gr7fL7Y"><strong>lval</strong></a> -> bool</td></tr><tr><td>0</td><td><a href="/pages/JQOLkab52gHqLyGkXtJW">void</a></td><td>return <a href="/pages/afXP8dZHgrOCSmyEnkyG">undefined</a></td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>1</td><td><mark style="color:red;"><strong>any</strong></mark> -> undef</td></tr><tr><td>null</td><td><a href="/pages/R3ynE2UXR34UtNehLZuE">await</a></td><td></td><td><span data-option="387ca1ae753e4fc3af85896e6944a0b4">🈚</span></td><td>null</td><td></td></tr><tr><td>13</td><td><a href="/pages/P4ST3jZjb1gfwAWg9IsW"><mark style="color:blue;"><strong><code>**</code></strong></mark></a></td><td><a href="/pages/P4ST3jZjb1gfwAWg9IsW">exponentiation</a></td><td><span data-option="4d3130aa22c342978df41d7124fe9c31">R</span></td><td>2</td><td>(n, n) -> n</td></tr><tr><td>null</td><td>*, /, <a href="/pages/O2w947xH8ypPvPS2qtuh"><mark style="color:blue;"><strong><code>%</code></strong></mark></a></td><td>multiply, divide, <a href="/pages/O2w947xH8ypPvPS2qtuh">remainder</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(n, n) -> n</td></tr><tr><td>0</td><td><a href="/pages/nq2DqK2fib1g0HU6vl6u"><mark style="color:blue;"><strong><code>+</code></strong></mark></a>, -</td><td><a href="/pages/nq2DqK2fib1g0HU6vl6u">add</a>, substract</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(n, n) -> n</td></tr><tr><td>0</td><td><a href="/pages/nq2DqK2fib1g0HU6vl6u"><mark style="color:blue;"><strong><code>+</code></strong></mark></a></td><td><a href="/pages/nq2DqK2fib1g0HU6vl6u">concatenate</a> strings</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(s, s) -> s</td></tr><tr><td>0</td><td>&#x3C;&#x3C;</td><td>shift left</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(i, i) -> i</td></tr><tr><td>0</td><td>>></td><td>shift right (sign extension)</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(i, i) -> i</td></tr><tr><td>0</td><td>>>></td><td>shift right (0 extension)</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(i, i) -> i</td></tr><tr><td>0</td><td>&#x3C; &#x3C;= > >=</td><td><a href="/pages/sgZ9cHnfohJ4DNz2Hklw">compare</a> (number)</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(n, n) -> b</td></tr><tr><td>0</td><td>&#x3C; &#x3C;= > >=</td><td><a href="/pages/sgZ9cHnfohJ4DNz2Hklw">compare</a> (string)</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(s, s) -> b</td></tr><tr><td>0</td><td><a href="/pages/VszqauWlisf9apvh8n8t">instanceof</a></td><td>test object class</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(o, f) -> b</td></tr><tr><td>0</td><td><a href="/pages/yFPMDvfgLWvBWu54f66H">in</a></td><td>test property existence</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, o) -> b</td></tr><tr><td>0</td><td><a href="/pages/VfGSRlicIpElR1ItaQbK"><mark style="color:blue;"><strong><code>==</code></strong></mark></a></td><td><a href="/pages/VfGSRlicIpElR1ItaQbK">equal (sloppy)</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> b</td></tr><tr><td>0</td><td>!=</td><td>not equal (sloppy)</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> b</td></tr><tr><td>0</td><td><a href="/pages/TnAQF7H4rMFMOO2mlyVt"><mark style="color:blue;"><strong><code>===</code></strong></mark></a></td><td><a href="/pages/TnAQF7H4rMFMOO2mlyVt">equal (strict)</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> b</td></tr><tr><td>0</td><td>!==</td><td>not equal (strict)</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> b</td></tr><tr><td>0</td><td>&#x26;</td><td>bitwise AND</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(i, i) -> i</td></tr><tr><td>0</td><td>^</td><td>bitwise XOR</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(i, i) -> i</td></tr><tr><td>0</td><td>|</td><td>bitwise OR</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(i, i) -> i</td></tr><tr><td>0</td><td>&#x26;&#x26;</td><td><a href="/pages/qzCxyRuJFHlmay9CCHSB">logical</a> AND</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> <mark style="color:red;"><strong>a</strong></mark></td></tr><tr><td>0</td><td>||</td><td><a href="/pages/qzCxyRuJFHlmay9CCHSB">logical</a> OR</td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> <mark style="color:red;"><strong>a</strong></mark></td></tr><tr><td>0</td><td><a href="/pages/wU2RNb6yCQ55AfGD2b1l"><mark style="color:blue;"><strong><code>??</code></strong></mark></a></td><td><a href="/pages/wU2RNb6yCQ55AfGD2b1l">nullish coalescing</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> <mark style="color:red;"><strong>a</strong></mark></td></tr><tr><td>0</td><td><a href="/pages/OGVaza2hXNtnNzASn3Xp"><mark style="color:blue;"><strong><code>?:</code></strong></mark></a></td><td><a href="/pages/jUUzgJEAT5FiPSykGOpi">ternary operator</a></td><td><span data-option="4d3130aa22c342978df41d7124fe9c31">R</span></td><td>3</td><td>(b, a, a) -> a</td></tr><tr><td>0</td><td><a href="/pages/YSrxRkNwxfNJDsLfTunf"><mark style="color:blue;"><strong><code>=</code></strong></mark></a></td><td><a href="/pages/YSrxRkNwxfNJDsLfTunf">assignment</a></td><td><span data-option="4d3130aa22c342978df41d7124fe9c31">R</span></td><td>2</td><td>(<a href="/pages/EG5ZD5r4UlLJ6gr7fL7Y"><strong>lval</strong></a>, a) -> a</td></tr><tr><td>0</td><td>**= *= /= %= += -= &#x26;= ^= |= &#x3C;&#x3C;= >>= >>>=</td><td>operate/assign</td><td><span data-option="4d3130aa22c342978df41d7124fe9c31">R</span></td><td>2</td><td>(<a href="/pages/EG5ZD5r4UlLJ6gr7fL7Y"><strong>lval</strong></a>, a) -> a</td></tr><tr><td>0</td><td><a href="/pages/YwW1TW6ejCi9hugsBILm"><mark style="color:blue;"><strong><code>,</code></strong></mark></a></td><td><a href="/pages/YwW1TW6ejCi9hugsBILm">return 2nd operand</a></td><td><span data-option="fcb74ebed1c14940aef92e6a2aeab8fd">L</span></td><td>2</td><td>(a, a) -> a</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lochiwei.gitbook.io/web/js/grammar/op/table-of-operators.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
