角色是看不见的,我们怎么知道在那?您可以要求编辑显示隐形字符 . 大多数文本编辑器都具有此功能 . 例如,Vim默认显示它们, ZWSP 显示为 <u200b> . 您也可以在线调试它:jsbin在其代码窗格中将字符显示为红点(但似乎在保存并重新加载页面后将其删除) . CodePen.io also displays it as a dot,保存后即可保存 .
相关问题
这个角色并不坏,它实际上非常有用 . This example on Wikipedia演示了它如何用于控制长字符串应该包装到下一行的位置 . 但是,如果您不知道角色在您的标记上的存在,它可能会成为一个问题 . 如果你有一个字符串(例如,没有可见内容的DOM元素的 nodeValue ),你可能希望这样的字符串为空,而实际上它不是(即使在应用 String.trim 之后) .
10 回答
运行OS X时,文件系统会创建基本上所有文件的隐藏分支,如果它们位于不支持HFS的硬盘驱动器上 . 这有时(刚刚发生在我身上)导致您的JavaScript引擎尝试运行数据分叉而不是您打算运行的代码 . 发生这种情况时,您也会收到
因为您的文件的数据分叉将包含Unicode U 200B字符 . 删除数据分叉文件将使您的脚本运行您的实际预期代码,而不是代码的二进制数据分支 .
我将所有空间区域更改为,就像那样,它没有问题 .
我希望它对某人有帮助 .
为什么要在代码中查找此问题?甚至,如果它是复制的 .
如果您可以看到,在同步文件夹中保存文件后发生了什么 - 您将在文件末尾看到类似
*****
的内容 . 它完全与你的代码无关 .Solution.
如果您在vagrant框中使用
nginx
- 添加到服务器配置:如果您在vagrant box中使用
apache
- 添加到服务器配置:问题来源:VirtualBox Bug
我在我的Mac上遇到了同样的问题,发现这是因为Mac正在用非常javascript字符的引号替换标准引号 .
要解决此问题,我必须更改我的mac系统首选项=>键盘=>文本(选项卡)上的设置取消选中使用智能引号和短划线(默认已选中) .
如果你正在运行一个nginx uwsgi setup vagrant,那么主要的问题是如某些答案中提到的带有send文件的虚拟框错误 . 但是要解决它,你必须在nginx和uwsgi中禁用sendfile .
在nginx.conf中发送文件关闭
uwsgi application / config --disable-sendfile
这是我的理由:
之前:
哪个
\u
是一个逃脱,我通过使用Codepen的分析JS来解决它 .后:
并修复了错误
当我在错误指向的行之后有一个未终止的字符串时,我在chrome中出现了这个错误 . 关闭字符串后,错误就消失了 .
错误示例:
示例没有错误:
错误
当JavaScript解释器解析代码时,会将其分解为名为"tokens"的片段 . 当令牌无法归类为four basic token types之一时,它会在大多数实现中标记为"ILLEGAL",并抛出此错误 .
例如,如果您尝试使用流氓
@
字符,错位的大括号,括号,"smart quotes",单引号未正确包含(例如this.run('dev1)
)等运行js文件,则会引发相同的错误 .但我看不出任何违法行为!
在分号后面的代码中有一个不可见的字符 . 它是Unicode U+200B Zero-width space字符(a.k.a .
ZWSP
,HTML实体​
) . 已知该字符会导致Unexpected token ILLEGAL
JavaScript语法错误 .它来自哪里?
我无法确定,但我的赌注是jsfiddle . 如果您从那里粘贴代码,则很可能包含一个或多个
U+200B
字符 . 似乎该工具使用该字符来控制长字符串上的自动换行 .从Chrome开发人员工具粘贴的代码可能包含该字符,但我无法使用当前版本(OSX上的22.0.1229.79)重现该代码,这也是reported .
我如何发现它?
角色是看不见的,我们怎么知道在那?您可以要求编辑显示隐形字符 . 大多数文本编辑器都具有此功能 . 例如,Vim默认显示它们,
ZWSP
显示为<u200b>
. 您也可以在线调试它:jsbin在其代码窗格中将字符显示为红点(但似乎在保存并重新加载页面后将其删除) . CodePen.io also displays it as a dot,保存后即可保存 .相关问题
这个角色并不坏,它实际上非常有用 . This example on Wikipedia演示了它如何用于控制长字符串应该包装到下一行的位置 . 但是,如果您不知道角色在您的标记上的存在,它可能会成为一个问题 . 如果你有一个字符串(例如,没有可见内容的DOM元素的
nodeValue
),你可能希望这样的字符串为空,而实际上它不是(即使在应用String.trim
之后) .ZWSP
也会导致在HTML页面上显示额外的空格,例如,当它在两个<div>
元素之间找到时(如this question所示) . 这种情况甚至不能在jsfiddle上重现,因为那里的字符被忽略了 .另一个潜在问题:如果网页的编码未被识别为UTF-8,则实际上可能会显示该字符(例如,在latin1中为
​
) .如果CSS代码(内联代码或外部样式表)中存在
ZWSP
,则样式也无法正确解析,因此某些样式不会被应用(如this question所示) .ECMAScript规范
我在ECMAScript规范(版本3和5.1)上找不到任何关于该特定字符的提及 . 当前版本在Section 7.1上提到类似的字符(
U+200C
和U+200D
),表示在"outside of comments, string literals, and regular expression literals"时它们应被视为IdentifierPart
. 例如,这些字符可以是变量名称的一部分(并且var x\u200c;
确实有效) .Section 7.2列出了有效的空格字符(例如制表符,空格,不间断空格等),并且含糊地提到任何其他Unicode“空格分隔符”(类别“Zs”)应该被视为空格 . 我可能不是讨论这方面规格的最佳人选,但在我看来
U+200B
应该被认为是白色空间,实际上实现(至少Chrome和Firefox)似乎将它们视为一个意外令牌(或其中一部分),导致语法错误 .如果您将代码从其他文档(如PDF)复制到控制台并尝试运行它,也可能会发生这种情况 .
我试图从我正在阅读的Javascript书中运行一些示例代码,并且很惊讶它没有在控制台中运行 .
显然,从PDF中复制会在代码中引入一些意外的,非法的和不可见的字符 .
我遇到了同样的问题,因为我在文本字符串中添加代码时按了回车键 .
因为它是一长串文本我想看到它而不必在我的文本编辑器中滚动,但是命中输入为字符串添加了一个不可见的字符,这是非法的 . 我使用Sublime Text作为我的编辑器 .