Javascript错误的可能情况:"预期的标识符,字符串或数字"

psy*_*tik 82 javascript

有些用户在我的网站上偶尔会报告JS错误.错误消息显示"预期标识符,字符串或数字",行号为423725915,这只是一个任意数字,并在发生这种情况时为每个报告更改.这主要发生在IE7/Mozilla 4.0浏览器上.

我扫描了我的代码了很多次并运行了jslint但它没有选择任何东西 - 任何人都知道导致此错误消息的JS问题的一般类型?

ame*_*der 143

这种类型的错误的原因通常可能是对象或数组定义中的错误逗号:

var obj = {
   id: 23,
   name: "test",  <--
}
Run Code Online (Sandbox Code Playgroud)

如果它出现在随机线上,也许它是动态创建的对象定义的一部分.

  • 您可以使用正则表达式",\ s*\]"和",\ s*\}"(不带引号)搜索此类事件.节省了我很多时间. (5认同)
  • 不,不会.大多数现代浏览器为您解决此问题.IE6/7没有.在IE7仿真模式下调试IE8并没有发现这一点.(我猜你知道IE7没有调试器 - 使用VS和IE7也没有捕获它).试试看然后告诉我;) (2认同)
  • 带有换行符的javascript的正则表达式:`,\ s*?\n?\ s*?]`和`,\ s*?\n?\ s*?\} (2认同)

Roy*_*Han 82

使用单词class作为Javascript词典中的键也可以触发可怕的"预期标识符,字符串或数字"错误,因为class是Internet Explorer中的保留关键字.

{ class : 'overlay'} // ERROR: Expected identifier, string or number
Run Code Online (Sandbox Code Playgroud)

{'class': 'overlay'}
Run Code Online (Sandbox Code Playgroud)

在Javascript词典中使用保留关键字作为键时,请将键括在引号中.

希望这个提示可以为你节省一天的调试时间.

  • 我有完全相同的错误,但在属性"导入".以下是"保留字"的完整列表https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words (3认同)

cjs*_*hno 11

实际上我最近在IE上得到了类似的东西,它与JavaScript语法"错误"有关.我说引号错误,因为它在IE上无处不在.这是在IE6下.该问题与JSON对象创建和额外的逗号有关,例如

{ one:1, two:2, three:3, }
Run Code Online (Sandbox Code Playgroud)

IE6真的不喜欢3之后的逗号.你可能会寻找类似的东西,敏感的小语法形式问题.

是的,我认为我的25行JavaScript中的数百万行号也很有趣.

祝好运.


Eri*_*ikE 9

这是一个明确的答案:消除一个诱人但错误的答案,以帮助其他人找到正确的答案.

看起来调试可能会突出显示问题.但是,问题出现的唯一浏览器是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>
Run Code Online (Sandbox Code Playgroud)

这让我产生了以下错误:

Line: 54654408
Error: Object required
Run Code Online (Sandbox Code Playgroud)


Jos*_*rra 5

刚看到我的一个应用程序中的错误,作为一个包罗万象,请记住将与关键字相同的所有javascript属性的名称括起来。

遇到对象如下的错误后发现此错误:

var x = { class: 'myClass', function: 'myFunction'};
Run Code Online (Sandbox Code Playgroud)

生成错误(类和函数是关键字),此错误已通过添加引号解决了

var x = { 'class': 'myClass', 'function': 'myFunction'};
Run Code Online (Sandbox Code Playgroud)

我希望能节省您一些时间