SyntaxError: illegal character

词法分析器 读取一个不在字符串字面量中的字符时,就会发生 JavaScript 异常 "非法字符",并且该字符不能构成语言中的有效标记。

消息

SyntaxError: Invalid or unexpected token (V8-based)
SyntaxError: illegal character U+201C (Firefox)
SyntaxError: Invalid character '\u201c' (Safari)

错误类型

哪里出错了?

有一个解释器不理解的无效字符。您应该将其放在字符串字面量中或将其替换为其他字符。使用支持语法高亮的编辑器,并仔细检查代码中的不匹配,例如减号 (-) 与连字符 () 或单引号 (") 与非标准引号 () 之间的区别。

示例

字符不匹配

有些字符看起来很相似,但会导致解析器无法解释您的代码。最常见的例子是引号,减号或分号 (希腊问号 (U+37e) 看起来一样)。

js
“This looks like a string”; // SyntaxError: illegal character
// “ and ” are not " but look like it

4213; // SyntaxError: illegal character
// – (en-dash) is not - but looks like it

const foo = "bar"; // SyntaxError: illegal character
// <37e> is not ; but looks like it

这应该可以工作

js
"This is actually a string";
42 - 13;
const foo = "bar";

一些编辑器和 IDE 会通知您,或者至少对它使用略微不同的突出显示,但并非所有编辑器和 IDE 都能做到。当您的代码中出现这种情况,而您无法找到问题根源时,最好的办法通常是删除有问题的行并重新输入。

遗漏的字符

很容易忘记一个字符。

js
const operators = ["+", "-", ×", "÷"];
// SyntaxError: illegal character U+00D7

"×" 添加缺少的引号。

js
const operators = ["+", "-", "×", "÷"];

隐藏的字符

从外部资源复制粘贴代码时,可能存在无效字符。小心!

js
const foo = "bar";// SyntaxError: illegal character

在像 Vim 这样的编辑器中检查此代码时,您可以看到实际上有一个 零宽空格 (ZWSP) (U+200B) 字符。

js
const foo = "bar";<200b>

另请参阅