SyntaxError: Unexpected token
Исключения JavaScript «неожиданный токен» возникают, когда синтаксический анализатор не видит в заданной позиции распознаваемый им токен, поэтому он не может понять структуру программы. Это может быть даже из-за опечатки.
Сообщение
SyntaxError: Unexpected token ';' (V8) SyntaxError: Unexpected identifier 'x' (V8) SyntaxError: Unexpected number (V8) SyntaxError: Unexpected string (V8) SyntaxError: Unexpected regular expression (V8) SyntaxError: Unexpected template string (V8) SyntaxError: unexpected token: identifier (Firefox) SyntaxError: expected expression, got "x" (Firefox) SyntaxError: expected property name, got "x" (Firefox) SyntaxError: expected target, got "x" (Firefox) SyntaxError: expected meta, got "x" (Firefox) SyntaxError: expected rest argument name, got "x" (Firefox) SyntaxError: expected closing parenthesis, got "x" (Firefox)
Тип ошибки
Что пошло не так?
Вместо определённой конструкции языка было использовано что-то другое. Возможно, это просто опечатка.
Примеры
Ожидаемое выражение
Например, в цепочке выражений в конце не допускается использование запятых.
for (let i = 0; i < 5,; ++i) {
console.log(i);
}
// Uncaught SyntaxError: expected expression, got ';'
Правильным вариантом будет убрать запятую или добавить ещё одно выражение:
for (let i = 0; i < 5; ++i) {
console.log(i);
}
Недостаточно скобок
Иногда можно потерять скобки при использовании if
:
function round(n, upperBound, lowerBound) {
if (n > upperBound) || (n < lowerBound) { // Здесь не хватает скобок!
throw new Error(`Число ${n} больше ${upperBound} или меньше ${lowerBound}`);
} else if (n < (upperBound + lowerBound) / 2) {
return lowerBound;
} else {
return upperBound;
}
} // SyntaxError: expected expression, got '||'
На первый взгляд кажется, что скобки расставлены правильно, но обратите внимание, что ||
находится не в скобках. Необходимо заключить ||
в скобки:
function round(n, upperBound, lowerBound) {
if ((n > upperBound) || (n < lowerBound)) {
throw new Error(
`Число ${n} больше ${upperBound} или меньше ${lowerBound}`,
);
} else if (n < (upperBound + lowerBound) / 2) {
return lowerBound;
} else {
return upperBound;
}
}