expected identifier string or number

В старом блоге была заметка с точно таким же заголовком и аналогичной смысловой нагрузкой. Я подумал, что нет никакого резона переносить ее в новый блог, слишком уж сомнительной, как мне казалось, была ее ценность.

Тем не менее, время от времени натыкаюсь на скрипты, где расставлены все те же грабли. Ситуация приобретает особый шарм, если содержащее ошибку приложение пропущено через компрессор и несжатые исходники отсутствуют.

Ошибка: Error: Expected identifier, string or number

Данная ошибка возникает в том случае, если в перечислении свойств объекта присутствует лишняя запятая — после последнего свойства. JavaScript движок в IE 7 (и ниже) считает, что не задано наименование следующего свойства объекта. Ситуация усугубляется тем, что при возникновении такой ошибки прекращается обработка всех JS скриптов на странице.

Ошибку вызовет вот такой код:

Как показывает опыт, чаще всего она допускается при перечислении свойств плагинов популярных JavaScript фреймворков. В предыдущей заметке я приводил пример, в котором фигурирует jQuery:

В обоих примерах, если убрать последнюю запятую в списке свойств, ошибка «Expected identifier, string or number» исчезнет.

Рассмотрим код в котором возникает ошибка. Причём ошибка только в браузере IE (у меня IE8), в остальных браузерах с этим нормально.

Это первый случай ошибки, который много где уже описан. Когда заканчивается перечисление переменных, то после последнего элемента не нужно ставить запятую. Internet Explorer считает это ошибкой и вообще не будет выполнять весь код, не откроет сайт (календарь FullCalendar в моём случае).

Но даже удалив запятую, ошибка не исчезнет. Именно этот случай у меня и возник (запятую ткнул для общности решения проблемы). При просмотре текста ошибки:

Error: Предполагается наличие идентификатора, строки или числа ( Expected identifier, string or number” )

Оказывается в браузере Internet Explorer слово delete — зарезервированное слово и просто так вводить переменную delete нельзя. Решение проблемы: заключить в одинарные кавычки, вот так — ‘delete’.

Правильный код, который будет работать в IE:

Using the word class as a key in a Javascript dictionary can also trigger the dreaded «Expected identifier, string or number» error because class is a reserved keyword in Internet Explorer.

When using a reserved keyword as a key in a Javascript dictionary, enclose the key in quotes.

Hope this hint saves you a day of debugging hell.

А здесь можно видеть список зарезервированных слов, чтобы уже не натыкаться (как видим save и close сюда не входят, поэтому их можем не брать в кавычки).

Список зарезервированных переменных для JavaScript, избегайте называть переменные зарезервированными словами!

abstract else instanceof super
boolean enum int switch
break export interface synchronized
byte extends let this
case false long throw
catch final native throws
char finally new transient
class float null true
const for package try
continue function private typeof
debugger goto protected var
default if public void
delete implements return volatile
do import short while
double in static with

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

I have an object like;

and when i run my page in IE8 standards its giving me the following error;

SCRIPT1028: Expected identifier, string or number

and points to the line : class:’ ‘,

can anyone please tell me why i cant use this for IE? is it a reserved word or something?

4 Answers 4

You need to add quotes round the class which is a reserved word. Please also note, that you should remove the last comma:

Оцените статью
SoftLast
Добавить комментарий