在使用r.js优化js文件时使用esprima解析文件错误

flo*_*nce 9 javascript requirejs r.js

我正在使用优化几个js文件r.js.它之前工作正常.最近,我修改了一些js代码,添加代码为:

var x = 08;
Run Code Online (Sandbox Code Playgroud)

然后它显示

错误:使用esprima解析文件D://webroot/js/a.js

错误:第45行:意外的令牌ILLEGAL.

第45行是我添加的地方var x = 08,09也会显示错误.似乎数字从0开始同时包含89非法.也许他们被视为bese 8号..?

我怎么能r.js忽略这一点并仍然优化js文件?

Pas*_*cal 15

我有同样的问题

当需要文件时,它只是一个双逗号.防爆

define([
 'file1',
 'file2',
 'file3',,
 'file4'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 这为我修好了!直到我读到这篇文章时,盯着文件的方式太长甚至没有注意到!谢谢! (2认同)
  • 天哪,我不敢相信我花了这么多时间才找到你的答案. (2认同)

Lou*_*uis 5

该错误是由Esprima引起的,它在r.js内部使用.要复制问题,您可以转到此页面并输入var x = 08;

一般来说,似乎JavaScript解释器会处理一个前导零的数字,可以将其解释为八进制数作为八进制数,但如果它不能被解释为八进制数(例如08),那么它们会将其视为十进制数. .

我用Node.js做了一个测试,得到了这个:

$ node
> 07
7
> 08
8
> 09
9
> 010
8
> 
Run Code Online (Sandbox Code Playgroud)

而且更有趣:

> (function () {'use strict'; var x = 08;})()
undefined
> (function () {'use strict'; var x = 012;})()
SyntaxError: Octal literals are not allowed in strict mode.
[ ... traceback deleted ...]
Run Code Online (Sandbox Code Playgroud)

当严格模式打开时,octals是非法的.

我会避免octals,并且永远不会在JavaScript中用零填充任何数字.