JavaScript运算符优先级技术细节

8

我很难理解在Javascript优先级第14组中幂运算和其他运算(如乘法、除法等)的结合意味着什么。

来源-MDN

有三个问题:

  1. 将从右到左和从左到右的结合性结合在一组中的含义是什么?
  2. 如何根据这些规则重新表达表达式2 ** 3 *4,并且仍然得到相同的答案?4 * 2 ** 3可以吗?
  3. 何时/如何不等同于给予幂运算更高的优先级似乎更简单?

从右往左意味着 2 ** 3 ** 4 = Math.pow(2, Math.pow(3, 4)); - Keith Nicholas
1个回答

3

1) 2 ** 3 ** 4, 由右往左结合,结果是2 ** (3 ** 4)2 / 3 / 4, 由左往右结合,结果是(2 / 3) / 4

2/3) 我认为2 ** 3 * 4,结果是(2 ** 3) * 42 * 3 ** 4,结果是2 * (3 ** 4)(通过es6fiddle进行了评估)。

这与表格不符;但是指数应该优先于乘法。在一个优先级等级中混合从左到右和从右到左是奇怪的。事实上,据我所见,在ES7草案中,指数运算符与*/%完全不同的语法处理方式,而是一元操作符!

还要注意,除Babel和Traceur之外,目前没有其他引擎支持**,因此它在这一点上大多是学术性的。 MDN是一个维基百科,指数运算符是由Mozillian添加的;但是据我所知,由于Mozilla目前不支持 ** ,因此它实际上并没有记录Mozilla解释语言的方式。


谢谢!我不知怎么理解幂运算是实验性的……我想我在那些糟糕的日子里把它内化为必要的操作了——我想这可能在FORTRAN中存在 :) - NessBird
指数运算是非常重要的,但你可以使用 Math.pow 函数。** 只是一种语法糖。 - Amadan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接