95 votes

Cas possibles pour erreur Javascript: "on Attend de l'identificateur de chaîne ou un nombre"

Certains utilisateurs sont des rapports occasionnels JS erreurs sur mon site. Le message d'erreur dit "on Attend de l'identificateur de chaîne ou un nombre" et le numéro de la ligne est 423725915, qui est juste un nombre arbitraire et des changements pour chaque rapport quand cela se produit. Cela se produit principalement avec IE7 Mozilla/ 4.0 navigateurs.

J'ai scanné mon code un tas de fois et a couru jslint, mais il n'a pas ramasser quoi que ce soit - ce que quelqu'un sait de façon générale le type de JS problèmes qui conduisent à ce message d'erreur?

154voto

amercader Points 2727

La cause de ce type d'erreur peut souvent être une virgule mal placée dans un objet ou un tableau de définition:

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

Si elle apparaît à une ligne aléatoire, c'est peut-être partie d'une définition de l'objet que vous créez dynamiquement.

85voto

Roy Hyunjin Han Points 1246

À l'aide de la parole de la classe , comme une clé dans un Javascript dictionnaire peut également déclencher le redoutable "Attendu de l'identificateur de chaîne ou un nombre d'erreur" parce que la classe est un mot clé réservé dans Internet Explorer.

MAUVAIS

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

BON

{'class': 'overlay'}

Lors de l'utilisation d'un mot clé réservé comme un élément clé dans un Javascript dictionnaire, placez la clé dans le devis.

Espérons que cette astuce vous permet d'économiser une journée de débogage de l'enfer.

11voto

cjstehno Points 3913

En fait j'ai eu quelque chose comme ça sur IE récemment, et elle était liée à la syntaxe JavaScript "erreurs". Je dis erreur entre guillemets parce qu'il était beau de partout, mais sur IE. C'était sous IE6. Le problème était lié à la création d'un objet JSON et une virgule supplémentaire, tels que

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

IE6 n'aime vraiment pas la virgule après 3. Vous pourriez regarder pour quelque chose comme ça, copain peu de syntaxe les questions relatives aux formalités.

Oui, je pense que le multi-millions de dollars numéro de ligne dans mon 25 ligne de JavaScript était intéressant.

Bonne chance.

9voto

ErikE Points 18233

C'est en définitive l'onu-réponse: l'élimination d'un tentant-mais-mauvaise réponse à aider les autres à s'orienter vers des réponses correctes.

Il peut sembler comme le débogage mettrait en évidence le problème. Cependant, le seul navigateur que le problème se produit en est IE, et dans IE vous ne pouvez déboguer le code qui faisait partie de l'original du document. Pour ajouter dynamiquement le code, le débogueur affiche seulement le corps de l'élément de l'instruction, et IE revendications de l'erreur qui s'est passé sur un grand nombre de ligne.

Voici un exemple de page web qui permettra de démontrer ce problème dans internet explorer:

<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, le message d'erreur suivant:

Line: 54654408
Error: Object required

4voto

chopstik Points 74

http://closure-compiler.appspot.com/home va chercher cette erreur avec une référence précise à l'actuel numéro de ligne dans la délinquance de script.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X