Некоторые пользователи сообщают о случайных ошибках JS на моем сайте. В сообщении об ошибке написано «Ожидаемый идентификатор, строка или номер», а номер строки - 423725915, который является произвольным числом и изменяется для каждого отчета, когда это происходит. В основном это происходит с браузерами IE7 / Mozilla 4.0.
Я просканировал свой код несколько раз и запустил jslint, но он ничего не обнаружил - кто-нибудь знает общий тип проблем JS, которые приводят к этому сообщению об ошибке?
javascript
психотик
источник
источник
Ответы:
Причиной этого типа ошибки часто может быть неуместная запятая в определении объекта или массива:
var obj = { id: 23, name: "test", <-- }
Если он появляется в случайной строке, возможно, это часть определения объекта, который вы создаете динамически.
источник
,\s*?\n?\s*?]
,\s*?\n?\s*?\}
Использование слова class в качестве ключа в словаре Javascript также может вызвать ужасную ошибку «Ожидаемый идентификатор, строка или число», поскольку класс - это зарезервированное ключевое слово в Internet Explorer.
ПЛОХО
{ class : 'overlay'} // ERROR: Expected identifier, string or number
ХОРОШО
{'class': 'overlay'}
При использовании зарезервированного ключевого слова в качестве ключа в словаре Javascript заключите ключ в кавычки.
Надеюсь, эта подсказка сэкономит вам день адской отладки.
источник
На самом деле я недавно получил нечто подобное в IE, и это было связано с синтаксическими «ошибками» JavaScript. Я говорю об ошибке в кавычках, потому что это было нормально везде, кроме IE. Это было под IE6. Проблема была связана с созданием объекта JSON и дополнительной запятой, например
{ one:1, two:2, three:3, }
IE6 действительно не любит эту запятую после 3. Вы можете поискать что-то в этом роде, небольшие проблемы с синтаксической формальностью.
Да, мне показалось, что многомиллионный номер строки в моем 25-строчном JavaScript тоже был интересным.
Удачи.
источник
Это окончательный отказ от ответа: устранение заманчивого, но неправильного ответа, чтобы помочь другим перейти к правильным ответам.
Может показаться, что отладка высветит проблему. Однако проблема возникает только в браузере IE, а в IE можно отлаживать только код, который был частью исходного документа. Для динамически добавляемого кода отладчик просто показывает элемент тела как текущую инструкцию, а 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
источник
<script>
тег, локальный или как загруженный ресурс. Отлаживать. Вернитесь к своему рабочему сценарию.Только что увидел ошибку в одном из моих приложений, в качестве универсального, не забудьте указать имена всех свойств javascript, которые совпадают с ключевым словом.
Обнаружил эту ошибку после исправления ошибки, когда объект, например:
var x = { class: 'myClass', function: 'myFunction'};
сгенерировал ошибку (класс и функция являются ключевыми словами) это было исправлено добавлением кавычек
var x = { 'class': 'myClass', 'function': 'myFunction'};
Я надеюсь сэкономить тебе время
источник
if(_features.delete){...}
что вызывало ошибку, потому что удаление - это ключевое слово. stackoverflow.com/questions/26255/…http://closure-compiler.appspot.com/home подберет эту ошибку с точной ссылкой на фактический номер строки в скрипте-нарушителе.
источник
Как отмечалось ранее, наличие лишней запятой приводило к ошибке.
Также в IE 7.0 отсутствие точки с запятой в конце строки вызывало ошибку. Он отлично работает в Safari и Chrome (без ошибок в консоли).
источник
IE7 гораздо менее снисходителен, чем новые браузеры, особенно Chrome. Мне нравится использовать JSLint для поиска этих ошибок. Среди прочего он найдет эти неправильно поставленные запятые. Вы, вероятно, захотите активировать опцию игнорирования неправильных пробелов.
Помимо неправильно поставленных запятых, в этом блоге в комментариях кто-то сообщил:
источник
Удалите ненужное, войдите в функцию. вы получите решение.
Обратитесь к этому
http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/
источник
Эта ошибка возникает, когда мы добавили или пропустили удаление запятой в конце массива или в коде функции. На наличие такой ошибки необходимо наблюдать весь код веб-страницы.
Я получил его в коде приложения 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>
источник
Для меня это звучит как сценарий, который был загружен с помощью src и загружен только наполовину, что вызывает синтаксическую ошибку, поскольку остаток не загружен.
источник
IE7 имеет проблемы с массивами объектов
columns: [ { field: "id", header: "ID" }, { field: "name", header: "Name" , /* this comma was the problem*/ }, ...
источник
Другой вариант этой ошибки: у меня была функция с именем «continue», и, поскольку это зарезервированное слово, она выдавала эту ошибку. Мне пришлось переименовать свою функцию в continueClick
источник
Возможно, у вас есть объект, имеющий метод «конструктор», и вы пытаетесь его вызвать.
источник
Вы можете столкнуться с этой проблемой при использовании Knockout JS. Если вы попытаетесь установить атрибут класса, как в примере ниже, это не удастся:
<span data-bind="attr: { class: something() }"></span>
Экранируйте строку класса следующим образом:
<span data-bind="attr: { 'class': something() }"></span>
Мои 2 цента.
источник
Я тоже столкнулся с этой проблемой. Я нашел ниже два решения. 1). Как уже упоминалось выше, удалите лишнюю запятую из объекта JSON. 2). Кроме того, мой JSP / HTML имел. Из-за этого он запускал старый режим браузера, который выдавал ошибку JS для дополнительной запятой. При использовании он запускает режим HTML5 браузера (если поддерживается) и отлично работает даже с дополнительной запятой, как и любые другие браузеры FF, Chrome и т. Д.
источник
Вот простой метод отладки проблемы: выведите скрипт / код на консоль. Скопируйте код из консоли в свою IDE. Большинство IDE выполняют проверку ошибок в коде и выделяют ошибки. Вы должны почти сразу увидеть ошибку в редакторе JavaScript / HTML.
источник
Была такая же проблема с другой конфигурацией. Это было в определении фабрики angular, но я предполагаю, что это могло произойти и в другом месте:
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 } } });
источник
Это также может произойти в Typescript, если вы вызываете функцию из ниоткуда внутри класса. Например
class Dojo implements Sensei { console.log('Hi'); // ERROR Identifier expected. constructor(){} }
Вызовы функций, например,
console.log()
должны быть внутри функций. Не в той области, где вы должны объявлять поля класса.источник
Машинопись для выпуска Windows
Это работает в IE, chrome, FF
export const OTP_CLOSE = { 'outcomeCode': 'OTP_CLOSE' };
Это работает в Chrome, FF, не работает в IE 11
export const OTP_CLOSE = { outcomeCode: 'OTP_CLOSE' };
Я думаю, это как-то связано с зарезервированными словами Windows
источник
Я столкнулся с этой ошибкой, когда вместо конечной запятой или чего-то подобного этот синтаксис использовался в constants.js
var titles = { [title.X]: 'X title', [title.Y]: 'Y title' }
IE 11 это совсем не понравилось.
Как упоминалось ранее, это легко исправить с помощью
var titles = { 'title.X': 'X title', 'title.Y': 'Y title' }
источник