10

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

var x = 08;

然后它显示

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

错误:第 45 行:意外的令牌非法。

第 45 行是我添加的地方var x = 0809也会显示错误。似乎以 0 开头的数字同时包含8or9是非法的。也许他们被视为 bese 8 数字..?

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

4

4 回答 4

15

我有同样的问题

原来,在需要文件时,它只是一个双逗号。前任

define([
 'file1',
 'file2',
 'file3',,
 'file4'

希望这可以帮助

于 2014-09-23T07:11:04.267 回答
5

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

一般来说,JavaScript 解释器似乎会将前导零的数字视为八进制数,但如果不能将其解释为八进制数(例如 08),则将其视为十进制数.

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

$ node
> 07
7
> 08
8
> 09
9
> 010
8
> 

为了更有趣:

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

当严格模式打开时,八进制是非法的。

我会避免使用八进制数,并且永远不要在 JavaScript 中为任何数字添加零前缀。

于 2013-11-04T17:45:29.013 回答
0

当我在 require js 模块内的单行 if 语句中忘记问号时,我遇到了同样的错误。

错误的线路:

var check = self.currentScroll() > self.lastScroll() ? 1 : self.currentScroll() < self.lastScroll() -1 : 0

更正:

var check = self.currentScroll() > self.lastScroll() ? 1 : self.currentScroll() < self.lastScroll() ? -1 : 0
于 2015-06-18T10:57:44.223 回答
0

在解析一个很长的字符串时,我也遇到了同样的问题:

var styleHTML = "<style>....</style>"

原来在字符串中我还包含了一些这样的注释:</p>

/* ... */

当我删除字符串中的所有css 注释时,它起作用了!

希望这可以帮助。

于 2016-05-16T06:42:58.477 回答