Возможные случаи ошибки Javascript: "Ожидаемый идентификатор, строка или номер"

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

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

Ответ 1

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

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

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

Ответ 2

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

BAD

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

ХОРОШО

{'class': 'overlay'}

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

Надеюсь, что этот намек сэкономит вам день отладки ада.

Ответ 3

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

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

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

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

Удачи.

Ответ 4

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

Может показаться, что отладка вызовет проблему. Однако единственным браузером, с которым возникает проблема, является 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

Ответ 5

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

Ответ 6

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

Обнаружил эту ошибку после посещения ошибки, в которой объект, например:

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

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

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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 10

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

Я получил его в приложении для 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>

Ответ 11

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

Ответ 12

IE7 имеет проблемы с массивами объектов

columns: [
{
  field: "id",
  header: "ID"
},
{
  field: "name",
  header: "Name" , /* this comma was the problem*/ 
},
...

Ответ 13

Еще одна вариация этой ошибки: у меня была функция с именем "continue", и поскольку это зарезервированное слово, она выбросила эту ошибку. Мне пришлось переименовать мою функцию "continueClick"

Ответ 14

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

Ответ 15

Вы можете столкнуться с этой проблемой при использовании Knockout JS. Если вы попытаетесь установить атрибут класса, как пример ниже, он не будет выполнен:

<span data-bind="attr: { class: something() }"></span>

Сбросьте строку класса следующим образом:

<span data-bind="attr: { 'class': something() }"></span>

Мои 2 цента.

Ответ 16

Я тоже столкнулся с этой проблемой. Я нашел ниже два решения. 1). Как упоминалось выше, удалите дополнительную запятую из объекта JSON. 2). Кроме того, у меня был JSP/HTML. Из-за этого он запускал старый режим браузера, который давал ошибку JS для дополнительной запятой. При использовании он запускает режим браузера HTML5 (если поддерживается), и он отлично работает даже с Extra Comma, как и любые другие браузеры FF, Chrome и т.д.

Ответ 17

Вот простой способ отладки проблемы: эхо-код script/на консоль. Скопируйте код с консоли в вашу среду IDE. Большинство IDE выполняют проверку ошибок кода и выделяют ошибки. Вы можете увидеть ошибку почти сразу в своем JavaScript/HTML-редакторе.

Ответ 18

Имел ту же проблему с другой конфигурацией. Это было в определении angular factory, но я предполагаю, что это может произойти и в другом месте:

angular.module("myModule").factory("myFactory", function(){
    return
    {
        myMethod : function() // <--- error showing up here
        {
            // method definition
        } 
    }
});

Исправление очень экзотично:

angular.module("myModule").factory("myFactory", function(){
    return { // <--- notice the absence of the return line
        myMethod : function()
        {
            // method definition
        } 
    }
});

Ответ 19

Используйте IEDeveloper ', и вы можете точно отладить ошибку, и инструмент даже показывает строку, где есть ошибка, попробуйте и наслаждайтесь