Uncaught SyntaxError: Unexpected identifier — что это означает?

Допу­стим, у нас есть такой код на JavaScript:

var backgrounds=array(); backgrounds[0]="/img/back_web.png"; backgrounds[1]="/img/back_web2.png"; document.getElementById('fon').style.background='url('backgrounds[1]') bottom no-repeat';

После запус­ка в бра­у­зе­ре код пада­ет с ошиб­кой:

❌ Uncaught SyntaxError: Unexpected identifier

Это зна­чит, что в коде появи­лась неиз­вест­ная пере­мен­ная, коман­да или объ­ект, о кото­рых бра­у­зер не зна­ет. Он не пони­ма­ет, что за сло­во или сим­вол он встре­тил, поэто­му выво­дит такое сооб­ще­ние.

👉 Ско­рее все­го, в коде про­сто опе­чат­ка. Но име­ет смысл про­ве­рить и дру­гие воз­мож­но­сти.

Что делать с ошибкой Uncaught SyntaxError: Unexpected identifier

Как и с боль­шин­ством оши­бок, бра­у­зер сооб­ща­ет нам номер стро­ки, где про­изо­шла ошиб­ка. У нас это будет чет­вёр­тая стро­ка:

Uncaught SyntaxError: Unexpected identifier

Если нажмём на номер стро­ки с ошиб­кой, бра­у­зер пока­жет нам подроб­но­сти:

Uncaught SyntaxError: Unexpected identifier

Мы видим, что бра­у­зер не понял, что за коман­ды идут после 'url(', поэто­му под­черк­нул их все крас­ной лини­ей. Похо­же, он поду­мал, что мы хоте­ли сооб­щить эле­мен­ту fon стиль фона в виде тек­ста url( — и всё, даль­ше закры­лась кавыч­ка. И что про­ис­хо­дит даль­ше в коде, интер­пре­та­то­ру JavaScript непо­нят­но. «Вы же закры­ли кавыч­ку, что вам от меня нуж­но?»

Кон­крет­но в нашем при­ме­ре про­грам­мист пыта­ет­ся уста­но­вить фон какого-то эле­мен­та, а в мас­си­ве backgrounds у него лежат адре­са и назва­ния фай­лов с фоном. Про­грам­мист пыта­ет­ся под­ста­вить содер­жи­мое backgrounds внутрь инструк­ции CSS, но для это­го нуж­но исполь­зо­вать плю­сы (скле­ить стро­ку). Без плю­сов это всё счи­та­ет­ся как одна боль­шая опе­чат­ка.

Пра­виль­но — вот так:

document.getElementById('fon').style.background='url(' + backgrounds[1] + ') bottom no-repeat';

Но это кон­крет­но в слу­чае наше­го кода. Unexpected identifier может появить­ся и в дру­гих слу­ча­ях:

  • допу­ще­ны опе­чат­ки;
  • лиш­ние сим­во­лы там, где их быть не долж­но;
  • наобо­рот, про­пу­сти­ли что-то нуж­ное (напри­мер, плюс или запя­тую);
  • исполь­зу­ет­ся пере­мен­ная или функ­ция, кото­рая не была объ­яв­ле­на выше;
  • про­пу­щен­ная точ­ка с запя­той.

Попробуйте сами

Каж­дый из этих фраг­мен­тов кода даст ошиб­ку Uncaught SyntaxError: Unexpected token. Попро­буй­те это испра­вить.

for (i = 0 i < 64; i += 4) {

}
for (val i = 0 i < 64; i += 4
{

}
function hex(x) {
  for (var i = 0; i < x.length; i++) {
    x i = rhex(x[i]);
  }
  return x.join('');
}