SyntaxError: illegal character

词法分析器 读取一个不属于字符串字面量,并且不能构成语言中有效标记的字符时,会抛出 JavaScript 异常“非法字符”。

消息

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

错误类型

SyntaxError

哪里出错了?

解释器无法理解无效字符。你应该将其放入字符串字面量中,或将其替换为其他字符。使用支持语法高亮的编辑器,并仔细检查你的代码,以防出现不匹配,例如减号 (-) 与破折号 () 或普通引号 (") 与非标准引号 () 等。

示例

不匹配的字符

有些字符看起来相似,但会导致解析器无法解释你的代码。这方面的著名例子有引号、减号或分号(希腊问号 (U+37e) 看起来相同)。

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

42 – 13; // 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 会通知你,或者至少会使用稍微不同的高亮显示,但并非所有都会。当你的代码发生这种情况,并且你无法找到问题根源时,通常最好直接删除有问题的行并重新输入。

遗漏的字符

很容易在此处或彼处遗漏一个字符。

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>

另见