SyntaxError:未带括号的一元表达式不能出现在“**”的左侧

当一元运算符(类型,空隙,删除,等待,!,~,+,-)用于指数算子没有括号。

消息

语法错误:紧邻求幂表达式之前使用的一元运算符。括号必须用于消除运算符优先级的歧义(基于V8)语法错误:未分词的一元表达式不能出现在“**”的左侧(Firefox)SyntaxError:意外的令牌“**”。求幂表达式左手边的模糊一元表达式;必须使用括号来消除表达式的歧义。(野生动物园)

错误类型

出了什么问题?

你可能会这样写:

js公司
-a**b公司

是否应评估为(-a)**b-(a**b)不明确。在数学中,-x2方法-(x**2)-这就是许多语言(包括Python、Haskell和PHP)处理它的方式。但使一元减号运算符优先于**打破对称a**-b,这是明确的a**(-b)因此,该语言禁止使用此语法,并要求您将两边插入括号以解决歧义。

js公司
(-a)**b-(a**b)

其他一元运算符也不能是求幂运算的左侧。

js公司
等待a**b!a**b公司+a**b公司~a**b

示例

在编写涉及求幂运算的复杂数学表达式时,可以这样写:

js公司
函数taylorSin(x){返回值(n)=>(-1**n*x**(2*n+1))/阶乘(2*n+1);//语法错误:未分词的一元表达式不能出现在“**”的左侧}

然而-1个**部分在JavaScript中是非法的。相反,用括号括住左操作数:

js公司
函数taylorSin(x){返回值(n)=>((-1)**n*x**(2*n+1))/阶乘(2*n+1);}

这也使代码的意图对其他读者更加清晰。

另请参见