栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript没有可见的原因导致“Unexpected token ILLEGAL”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript没有可见的原因导致“Unexpected token ILLEGAL”

错误

当Javascript解释器解析代码时,它会分成称为“令牌”的部分。当令牌不能分类为四种基本令牌类型之一时,在大多数实现中它将被标记为“ILLEGAL”,并且会引发此错误。

例如,如果您尝试运行带有流氓

@
字符,错放的花括号,括号,“智能引号”,未正确括起来的单引号(例如
this.run('dev1)
)等js文件,则会引发相同的错误。

许多不同的情况都可能导致此错误。但是,如果您没有明显的语法错误或非法字符,则可能是由看不见的非法字符引起的。这就是答案。

但是我看不到任何非法的东西!

分号后的代码中有一个不可见的字符。这是Unipre

U+200B
零宽度空格字符(又名
ZWSP
HTML实体
​
)。已知该字符会导致
Unexpectedtoken ILLEGAL
Javascript语法错误。

它是从哪里来的?

我不能肯定地说,但是我的赌注是jsfiddle。如果从那里粘贴代码,则很可能包含一个或多个

U+200B
字符。看来该工具使用该字符来控制长字符串的自动换行。

在最新的jsfiddle更新之后,它现在像prepen一样将字符显示为红点显然_,它也不再

U+200B
自己插入字符,因此此问题从现在开始应该不那么频繁了。

****由于 VirtualBox中的错误,Vagrant有时也会引起此问题。解决方案是

sendfileoff;
在您的nginx配置中设置,或者
EnableSendfile Off
使用Apache。

据报道,从Chrome开发人员工具粘贴的代码可能包含该字符,但我无法在当前版本(OSX上为22.0.1229.79)上重现该字符。

我怎样才能发现它?

角色是不可见的,我们怎么知道它在那里?您可以要求编辑器显示不可见的字符。大多数文本编辑器都具有此功能。例如,Vim默认情况下显示它们,并且

ZWSP
显示为
<u200b>
。您也可以在线调试它:jsbin在其代码窗格上将字符显示为红点(但在保存并重新加载页面后似乎将其删除)。CodePen.io还将其显示为点,并且即使保存后也将其保留。

ECMAscript规范

我在ECMAscript规范(版本3和5.1)中没有提到该特定字符。当前版本在第7.1节中提到了相似的字符(

U+200C
U+200D
),该字符表示“在注释,字符串文字和正则表达式文字之外”时应将它们视为s。例如,这些字符可能是变量名的一部分(并且确实有效)。
IdentifierPart``var xu200c;

第7.2节列出了有效的空格字符(例如制表符,空格,不间断空格等),并隐约提及将任何其他Unipre“空格分隔符”(类别“
Zs”)都视为空格。我可能不是讨论这方面规范的最佳人选,但是在我看来,

U+200B
应该根据实际情况将其视为空白,而实际上,实现(至少是Chrome和Firefox)似乎将它们视为意外情况。令牌(或其中一部分),导致语法错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号