Babel中的八进制数

3
我可以帮您进行翻译。下面是您需要翻译的内容:

我正在使用babel-cli。我已经安装了ES2015扩展,且它运行良好。例如,以下代码片段:

let square = x => x * x;

...被转换成:

"use strict";

var square = function square(x) {
  return x * x;
};

然而,当我使用八进制数时遇到了一些问题。例如:
let mode = 0777;

出现错误:

SyntaxError: index.js: Invalid number (1:11)
> 1 | let mode = 0777;
    |            ^

  2 |

看起来它不喜欢以 0 开头的数字(八进制数)。我该怎么解决?

实际上,这样的数字不是出现在我的代码中,而是出现在其中一个依赖项中。

这是babel的错误还是特性?有什么解决方法/方案吗?


1
当我在浏览器中尝试时,它会显示:"严格模式下不允许使用八进制字面量。" - Hacketo
在严格模式下,您不能使用八进制数字。请参见此处的第2点。 - MinusFour
哦,我不知道!但既然这不是我的代码,那该怎么解决呢?看起来已经在这个提交中修复了。这个问题来自于mkdirp - Ionică Bizău
1个回答

3
你做错了,应该像这样写:let mode = 0o777;,注意在0777之间有一个o
ES6文档在这里:二进制和八进制字面量

// try this in chrome
document.write(0o777);


1
哦,有趣!我不知道那个!看起来它正在工作。但由于这不是我的代码,是否有任何希望通过使用一些变通方法让它工作? - Ionică Bizău
Babel会这样识别它,但像Chrome这样的浏览器以松散的验证模式工作,而0777在Chrome中的行为类似于0o777,但这不是标准,并且在不同平台上会失败,因此所有良好的代码都应遵循标准。标准在此处提到:https://github.com/lukehoban/es6features#binary-and-octal-literals - Ammar Hasan
1
"0777" 在非严格模式的 JS 引擎中可以工作,但 Babel 代码默认是严格模式。 - loganfsmyth

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