Certains utilisateurs signalent des erreurs JS occasionnelles sur mon site. Le message d'erreur indique «Identificateur, chaîne ou numéro attendu» et le numéro de ligne est 423725915, qui est simplement un nombre arbitraire et change pour chaque rapport lorsque cela se produit. Cela se produit principalement avec les navigateurs IE7 / Mozilla 4.0.
J'ai scanné mon code plusieurs fois et exécuté jslint mais il n'a rien détecté - quelqu'un connaît le type général de problèmes JS qui conduisent à ce message d'erreur?
javascript
psychotik
la source
la source
Réponses:
La cause de ce type d'erreur peut souvent être une virgule mal placée dans une définition d'objet ou de tableau:
var obj = { id: 23, name: "test", <-- }
S'il apparaît sur une ligne aléatoire, cela fait peut-être partie d'une définition d'objet que vous créez dynamiquement.
la source
,\s*?\n?\s*?]
et,\s*?\n?\s*?\}
L'utilisation du mot classe comme clé dans un dictionnaire Javascript peut également déclencher l'erreur redoutée «Identifiant, chaîne ou numéro attendu» car la classe est un mot-clé réservé dans Internet Explorer.
MAL
{ class : 'overlay'} // ERROR: Expected identifier, string or number
BIEN
{'class': 'overlay'}
Lorsque vous utilisez un mot-clé réservé comme clé dans un dictionnaire Javascript, mettez la clé entre guillemets.
J'espère que cet indice vous fera gagner une journée d'enfer de débogage.
la source
En fait, j'ai eu quelque chose comme ça sur IE récemment et c'était lié à des "erreurs" de syntaxe JavaScript. Je dis erreur entre guillemets parce que c'était bien partout mais sur IE. C'était sous IE6. Le problème était lié à la création d'objets JSON et à une virgule supplémentaire, telle que
{ one:1, two:2, three:3, }
IE6 n'aime vraiment pas cette virgule après 3. Vous pourriez chercher quelque chose comme ça, des petits problèmes de formalité de syntaxe délicats.
Oui, je pensais que le numéro de plusieurs millions de lignes dans mon JavaScript de 25 lignes était également intéressant.
Bonne chance.
la source
Il s'agit d'une non-réponse définitive: éliminer une réponse tentante mais fausse pour aider les autres à trouver les bonnes réponses.
Il peut sembler que le débogage mettrait en évidence le problème. Cependant, le seul navigateur dans lequel le problème se produit est IE, et dans IE, vous ne pouvez déboguer que le code qui faisait partie du document d'origine. Pour le code ajouté dynamiquement, le débogueur affiche simplement l'élément body comme l'instruction actuelle, et IE affirme que l'erreur s'est produite sur un numéro de ligne énorme.
Voici un exemple de page Web qui illustrera ce problème dans 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>
Cela a donné pour moi l'erreur suivante:
Line: 54654408 Error: Object required
la source
<script>
balise, locale ou en tant que ressource chargée. Déboguer. Revenez à votre script de travail.Je viens de voir le bogue dans l'une de mes applications, comme un fourre-tout, n'oubliez pas de joindre le nom de toutes les propriétés javascript qui sont les mêmes que le mot-clé.
J'ai trouvé ce bogue après avoir assisté à un bogue où un objet tel que:
var x = { class: 'myClass', function: 'myFunction'};
généré l'erreur (la classe et la fonction sont des mots-clés) cela a été corrigé en ajoutant des guillemets
var x = { 'class': 'myClass', 'function': 'myFunction'};
J'espère te faire gagner du temps
la source
if(_features.delete){...}
ce qui causait une erreur car delete est un mot-clé. stackoverflow.com/questions/26255/…http://closure-compiler.appspot.com/home détectera cette erreur avec une référence précise au numéro de ligne réel dans le script incriminé.
la source
Comme indiqué précédemment, le fait d'avoir une virgule supplémentaire a généré une erreur.
Également dans IE 7.0, l'absence de point-virgule à la fin d'une ligne provoquait une erreur. Cela fonctionne bien dans Safari et Chrome (sans erreur dans la console).
la source
IE7 est beaucoup moins indulgent que les navigateurs plus récents, en particulier Chrome. J'aime utiliser JSLint pour trouver ces bogues. Il trouvera ces virgules mal placées, entre autres. Vous voudrez probablement activer l'option pour ignorer les espaces blancs inappropriés.
En plus des virgules mal placées, sur ce blog, dans les commentaires, quelqu'un a signalé:
la source
Supprimez les éléments indésirables, connectez-vous à la fonction. vous obtiendrez la solution.
Référez ceci
http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/
la source
Cette erreur se produit lorsque nous ajoutons ou manquons de supprimer une virgule à la fin du tableau ou dans le code de fonction. Il est nécessaire d'observer l'intégralité du code d'une page Web pour une telle erreur.
Je l'ai eu dans un code d'application Facebook pendant que je codais pour une 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>
la source
Cela me semble être un script qui a été extrait avec src, et chargé juste à mi-chemin, provoquant une erreur de syntaxe sine que le reste n'est pas chargé.
la source
IE7 a des problèmes avec les tableaux d'objets
columns: [ { field: "id", header: "ID" }, { field: "name", header: "Name" , /* this comma was the problem*/ }, ...
la source
Une autre variante de ce bogue: j'avais une fonction nommée «continuer» et comme c'est un mot réservé, il a jeté cette erreur. J'ai dû renommer ma fonction 'continueClick'
la source
Peut-être que vous avez un objet ayant une méthode «constructeur» et essayez de l'invoquer.
la source
Vous pouvez rencontrer ce problème lors de l'utilisation de Knockout JS. Si vous essayez de définir un attribut de classe comme dans l'exemple ci-dessous, cela échouera:
<span data-bind="attr: { class: something() }"></span>
Échappez la chaîne de classe comme ceci:
<span data-bind="attr: { 'class': something() }"></span>
Mes 2 cents.
la source
J'avais moi aussi rencontré ce problème. J'ai trouvé ci-dessous deux solutions. 1). Comme mentionné par d'autres ci-dessus, supprimez la virgule supplémentaire de l'objet JSON. 2). En outre, mon JSP / HTML avait. Pour cette raison, il déclenchait l'ancien mode du navigateur qui donnait une erreur JS pour une virgule supplémentaire. Lorsqu'il est utilisé, il déclenche le mode HTML5 du navigateur (s'il est pris en charge) et il fonctionne bien même avec Extra Virgule, comme tous les autres navigateurs FF, Chrome, etc.
la source
Voici une technique simple pour déboguer le problème: envoyer le script / code à la console. Copiez le code de la console dans votre IDE. La plupart des IDE vérifient les erreurs sur le code et mettent en évidence les erreurs. Vous devriez pouvoir voir l'erreur presque immédiatement dans votre éditeur JavaScript / HTML.
la source
Eu le même problème avec une configuration différente. C'était dans une définition d'usine angulaire, mais je suppose que cela pourrait également arriver ailleurs:
angular.module("myModule").factory("myFactory", function(){ return { myMethod : function() // <--- error showing up here { // method definition } } });
Le correctif est très exotique:
angular.module("myModule").factory("myFactory", function(){ return { // <--- notice the absence of the return line myMethod : function() { // method definition } } });
la source
Cela peut également se produire dans Typescript si vous appelez une fonction au milieu de nulle part dans une classe. Par exemple
class Dojo implements Sensei { console.log('Hi'); // ERROR Identifier expected. constructor(){} }
Les appels de fonction, comme
console.log()
doivent l'être à l'intérieur des fonctions. Pas dans la zone où vous devez déclarer les champs de classe.la source
Problème de typographie pour Windows
Cela fonctionne dans IE, chrome, FF
export const OTP_CLOSE = { 'outcomeCode': 'OTP_CLOSE' };
Cela fonctionne dans chrome, FF, ne fonctionne pas dans IE 11
export const OTP_CLOSE = { outcomeCode: 'OTP_CLOSE' };
Je suppose que cela est en quelque sorte lié aux mots réservés de Windows
la source
Je suis tombé sur cette erreur où plutôt qu'une virgule de fin ou quelque chose du genre, cette syntaxe avait été utilisée dans un constants.js
var titles = { [title.X]: 'X title', [title.Y]: 'Y title' }
IE 11 n'aimait pas du tout cela.
Comme mentionné précédemment, cela a été facilement résolu en utilisant
var titles = { 'title.X': 'X title', 'title.Y': 'Y title' }
la source