SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'
Ngoại lệ JavaScript "unparenthesized unary expression can't appear on the left-hand side of '**'" xảy ra khi một toán tử một ngôi (một trong số typeof, void, delete, await, !, ~, +, -) được sử dụng trên toán hạng bên trái của toán tử lũy thừa mà không có dấu ngoặc đơn.
Thông báo
SyntaxError: Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence (V8-based) SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**' (Firefox) SyntaxError: Unexpected token '**'. Ambiguous unary expression in the left hand side of the exponentiation expression; parentheses must be used to disambiguate the expression. (Safari)
Loại lỗi
SyntaxError
Điều gì đã xảy ra?
Bạn có thể đã viết cái gì đó như thế này:
-a ** b
Liệu nó có nên được đánh giá là (-a) ** b hay -(a ** b) là không rõ ràng. Trong toán học, -x2 có nghĩa là -(x ** 2) — và đó là cách nhiều ngôn ngữ, bao gồm Python, Haskell và PHP, xử lý nó. Nhưng việc ưu tiên toán tử trừ một ngôi hơn ** phá vỡ tính đối xứng với a ** -b, vốn không mơ hồ là a ** (-b). Do đó, ngôn ngữ cấm cú pháp này và yêu cầu bạn đặt dấu ngoặc đơn xung quanh một trong hai phía để giải quyết sự mơ hồ.
(-a) ** b
-(a ** b)
Các toán tử một ngôi khác cũng không thể là phía bên trái của lũy thừa.
await a ** b
!a ** b
+a ** b
~a ** b
Ví dụ
Khi viết các biểu thức toán học phức tạp liên quan đến lũy thừa, bạn có thể viết cái gì đó như thế này:
function taylorSin(x) {
return (n) => (-1 ** n * x ** (2 * n + 1)) / factorial(2 * n + 1);
// SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'
}
Tuy nhiên, phần -1 ** n là bất hợp lệ trong JavaScript. Thay vào đó, hãy đặt dấu ngoặc đơn cho toán hạng bên trái:
function taylorSin(x) {
return (n) => ((-1) ** n * x ** (2 * n + 1)) / factorial(2 * n + 1);
}
Điều này cũng làm cho ý định của code rõ ràng hơn nhiều cho các người đọc khác.
Xem thêm
- Lũy thừa (
**) - Ưu tiên toán tử
- Thảo luận gốc về ưu tiên toán tử lũy thừa trên esdiscuss.org