Возможные случаи ошибки Javascript: «Ожидаемый идентификатор, строка или число» - PullRequest
80 голосов
/ 27 января 2010

Некоторые пользователи сообщают о случайных ошибках JS на моем сайте. Сообщение об ошибке гласит «Ожидаемый идентификатор, строка или номер», а номер строки - 423725915, который является просто произвольным числом и изменяется для каждого отчета, когда это происходит. В основном это происходит в браузерах IE7 / Mozilla 4.0.

Я несколько раз сканировал свой код и запускал jslint, но он ничего не обнаружил - кто-нибудь знает об общем типе проблем JS, которые приводят к этому сообщению об ошибке?

Ответы [ 19 ]

141 голосов
/ 27 января 2010

Причиной ошибки такого типа часто может быть неуместная запятая в определении объекта или массива:

var obj = {
   id: 23,
   name: "test",  <--
}

Если оно появляется в произвольной строке, возможно, это часть определения объекта, которое вы создаете динамически.

82 голосов
/ 11 января 2012

Использование слова class в качестве ключа в словаре Javascript также может вызвать страшную ошибку «Ожидаемый идентификатор, строка или число», поскольку class является зарезервированным ключевым словом в Internet Explorer.

BAD

{ class : 'overlay'} // ERROR: Expected identifier, string or number

GOOD

{'class': 'overlay'}

При использовании зарезервированного ключевого слова в качестве ключа в словаре Javascript заключите ключ в кавычки.

Надеюсь, этот совет спасет вас от адского отладки.

11 голосов
/ 27 января 2010

На самом деле я недавно получил что-то подобное в IE, и это было связано с синтаксисом JavaScript "ошибки". Я говорю об ошибке в кавычках, потому что это было хорошо везде, но на IE. Это было под IE6. Проблема была связана с созданием объекта JSON и дополнительной запятой, такой как

{ one:1, two:2, three:3, }

IE6 действительно не нравится эта запятая после 3. Вы могли бы искать что-то в этом роде, небольшие проблемы с формальностью синтаксиса.

Да, я думал, что многомиллионный номер в моем 25-строчном JavaScript тоже был интересен.

Удачи.

9 голосов
/ 27 января 2010

Это категорический отказ от ответа: устранение заманчивого, но неправильного ответа, чтобы помочь другим найти правильные ответы.

Может показаться, что отладка высветит проблему. Однако единственный браузер, в котором возникает проблема, - это IE, а в IE вы можете отлаживать только тот код, который был частью исходного документа. Для динамически добавляемого кода отладчик просто отображает элемент body в качестве текущей инструкции, а IE утверждает, что ошибка произошла с огромным номером строки.

Вот пример веб-страницы, которая продемонстрирует эту проблему в IE:

<html>
<head>
<title>javascript debug test</title>
</head>
<body onload="attachScript();">
<script type="text/javascript">
function attachScript() {
   var s = document.createElement("script");
   s.setAttribute("type", "text/javascript");
   document.body.appendChild(s);
   s.text = "var a = document.getElementById('nonexistent'); alert(a.tagName);"
}
</script>
</body>

Это дало мне следующую ошибку:

Line: 54654408
Error: Object required
4 голосов
/ 07 сентября 2013

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

Нашел эту ошибку после исправления ошибки, когда такой объект, как:

var x = { class: 'myClass', function: 'myFunction'};

сгенерировал ошибку (класс и функция - ключевые слова) это было исправлено добавлением кавычек

var x = { 'class': 'myClass', 'function': 'myFunction'};

Я надеюсь сэкономить вам время

4 голосов
/ 10 августа 2012

http://closure -compiler.appspot.com / home поднимет эту ошибку с точной ссылкой на фактический номер строки в скрипте-нарушителе.

2 голосов
/ 13 августа 2011

IE7 намного менее прост, чем новые браузеры, особенно Chrome. Мне нравится использовать JSLint , чтобы найти эти ошибки. Он найдет эти неправильно поставленные запятые, между прочим. Возможно, вы захотите активировать опцию игнорирования неправильного пробела.

В дополнение к неправильно размещенным запятым, на этом блоге в комментариях кто-то сообщал:

Я выискивал ошибку, которая говорила только "Ожидаемый идентификатор" только в IE (7). Мои исследования привели меня на эту страницу. После некоторого разочарование, оказалось, что проблема, которую я использовал зарезервированный слово как имя функции («переключатель»). Ошибка не была ясна, и это указал на неправильный номер строки.

2 голосов
/ 11 августа 2011

Как отмечалось ранее, добавление лишней запятой приводило к ошибке.

Также в IE 7.0 отсутствие точки с запятой в конце строки вызывало ошибку. Он отлично работает в Safari и Chrome (без ошибок в консоли).

1 голос
/ 26 июня 2013

Эта ошибка возникает, когда мы добавляем или пропускаем удаление запятой в конце массива или в коде функции. Для такой ошибки необходимо соблюдать весь код веб-страницы.

Я получил его в коде приложения Facebook, когда кодировал API Facebook.

<div id='fb-root'>
    <script type='text/javascript' src='http://connect.facebook.net/en_US/all.js'</script>
    <script type='text/javascript'>
          window.fbAsyncInit = function() {
             FB.init({appId:'".$appid."', status: true, cookie: true, xfbml: true});            
             FB.Canvas.setSize({ width: 800 , height: 860 , }); 
                                                       // ^ extra comma here
          };
    </script>
1 голос
/ 30 января 2012

Удалите ненужные, войдите в функцию. вы получите решение.

См. Это

http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...