ブラウザコンソールで実行すると、SyntaxError: Unexpected token **
。ノードで試してください:
> -1**2
...
...
...
...^C
これは算術式で、**
は電力演算子です。他のオペレーターにはこのような問題はありません。
奇妙なことに、*/
2行目で実行がトリガーされます。
> -1**2
... */
-1**2
^^
SyntaxError: Unexpected token **
ここで何が起きてるの?
MDNのドキュメント から:
JavaScriptでは、あいまいなべき乗表現を書くことは不可能です。つまり、単項演算子(
+
/-
/~
/!
/delete
を置くことはできません。/void
/typeof
)ベース番号の直前。
その理由も同じテキストで説明されています。
PHP and Pythonおよびその他の累乗演算子(通常は
^
または**
)などの他の言語では、累乗演算子単項+
や単項-
などの単項演算子よりも優先順位が高いと定義されていますが、いくつかの例外があります。たとえば、Bashでは、**
演算子は単項演算子よりも低い優先順位。
そのため、混乱を避けるために、コードは曖昧さを取り除き、括弧を明示的に配置する必要があると判断されました。
(-1)**2
または:
-(1**2)
サイドノートとして、binary-
はそのようには処理されません-優先順位が低いため-最後の式は同じですこの有効な式としての結果:
0-1**2
上記の引用ですでに確認されているように、中置べき乗演算子を持つほとんどのプログラミング言語は、単項マイナスよりもその演算子に高い優先順位を与えます。
以下に、単項マイナス演算子を優先するプログラミング言語の他の例を示します。