【问题标题】:Is the double asterisk ** a valid JavaScript operator?双星号 ** 是有效的 JavaScript 运算符吗?
【发布时间】:2016-01-21 22:35:10
【问题描述】:

我在 CodeWars 上解决了一个 kata,并在查看其他一些解决方案时遇到了双星号来表示力量。我做了一些研究,可以看到这是 python 中的有效运算符,但在 JavaScript 文档中看不到任何内容。

var findNb = m =>
{
  var n = Math.floor((4*m)**.25);
  var sum = x => (x*(x+1)/2)**2;
  return sum(n) == m ? n : -1;
}

然而,当我在 CodeWars 上运行此解决方案时,它似乎可以工作。我想知道这是否是 ES6 中的新功能,尽管我没有发现任何关于它的信息。

【问题讨论】:

  • ** 是粗体的降价指示符。可能是作者在写markdown答案时语法错误。
  • 来自specMultiplicativeOperator : * / % 之一
  • @Grundy 他也在使用粗箭头,所以有可能
  • fat arrow (=>) 在 ES6 规范中。 exponential operator (**) 在 ES7 规范中。我对代码战一无所知,但如果您使用 TraceurBabel,这可能是有效的 JavaScript
  • 所以,我只是看了一下 codewars,他们的所有代码都通过 BabelJS 运行,这就解释了为什么这段代码可以与 ES6 和 ES7 运算符一起使用。

标签: javascript math operators


【解决方案1】:

是的。 **指数运算符,相当于Math.pow

它是在 ECMAScript 2016 (ES7) 中引入的。

详情请看Exploring ES2016proposalchapter

【讨论】:

    【解决方案2】:

    ** 是在 ECMAScript 2016 (ES7) 中引入的。但请记住,并非所有 javascripts 环境都实现它(例如,Internet Explorer 不支持它)。

    如果你想跨浏览器,你必须使用Math.pow

    Math.pow(4, 5)
    

    【讨论】:

    • ^^^ 确实,它会抛出Uncaught SyntaxError: Unexpected token *(…)
    • 这个答案取决于您使用的 ECMAScript 版本,因为正如 Thomas 指出的那样,ES7 是错误的
    • 这个答案在发布时可能是正确的,但现在不正确。应该编辑它以提及 ** 存在/不存在的 JavaScript 版本。
    【解决方案3】:

    ** 运算符是 ES7 中的有效运算符。它与Math.pow(x,y) 具有相同的含义 例如,2**3Math.pow(2,3) 相同

    这里是来自维基百科的详细信息。

    ES7 中添加的两个新特性:

    求幂运算符 (**) 和 Array.prototype.includes

    https://en.wikipedia.org/wiki/ECMAScript#cite_ref-ES2016_12-1

    你可以在这个Babel Live compiler玩这个

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2011-02-24
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      相关资源
      最近更新 更多