Javascript 错误的可能情况:“预期的标识符、字符串或数字”

IT技术 javascript
2021-03-09 18:59:23

有些用户偶尔会在我的网站上报告 JS 错误。错误消息说“预期的标识符、字符串或数字”,行号是 423725915,这只是一个任意数字,并且在发生这种情况时每个报告都会发生变化。这主要发生在 IE7/Mozilla 4.0 浏览器中。

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

6个回答

此类错误的原因通常是对象或数组定义中的逗号错位:

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

如果它出现在随机行中,则它可能是您动态创建的对象定义的一部分。

这是一个失踪; 在事件分配中。查看动态创建的对象的线索有助于了解这一点。jslint 最初没有找到它,因为它是作为内联 js 生成的,作为 html 页面的一部分。谢谢!
2021-04-27 18:59:23
您可以使用正则表达式 ",\s*]" 和 ",\s*\}"(不带引号)搜索此类事件。为我节省了很多时间。
2021-04-30 18:59:23
不,不会。大多数现代浏览器都会为您解决这个问题。IE6/7 没有。并且在 IE7 仿真模式下调试 IE8 不会捕捉到这一点。(我猜你知道 IE7 没有调试器——在 IE7 中使用 VS 也不会捕捉到这个)。试试然后告诉我;)
2021-05-09 18:59:23
正则表达式换行像这样的javascript:,\s*?\n?\s*?],\s*?\n?\s*?\}
2021-05-13 18:59:23
谢谢!显然,这在其他浏览器(如 Chrome)中不是问题。
2021-05-19 18:59:23

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

坏的

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

好的

{'class': 'overlay'}

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

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

感谢您让我免于盯着这个 javascript 库超过必要的时间。
2021-04-23 18:59:23
@travis 由于#674,他们实际上允许它:-)
2021-05-06 18:59:23
我向 JSHint 提交了一个错误,希望他们将来能够检测到这些类型的错误:github.com/jshint/jshint/issues/1000
2021-05-07 18:59:23
我有完全相同的错误,但在属性“导入”上。这是“保留字”的完整列表developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-05-14 18:59:23
不错,我在这个问题上挣扎了几个小时。现在解决了。
2021-05-19 18:59:23

实际上我最近在 IE 上遇到了类似的问题,它与 JavaScript 语法“错误”有关。我用引号说错误是因为它在任何地方都很好,但在 IE 上。这是在 IE6 下。该问题与 JSON 对象创建和额外的逗号有关,例如

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

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

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

祝你好运。

+1 这对我帮助很大。额外的问号对我来说没有破坏 ie8,但确实破坏了 ie7。
2021-05-03 18:59:23

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

调试似乎会突出问题。但是,出现问题的唯一浏览器是 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
@Protectorone 通过<script>标签(本地或作为加载的资源)暂时将 javascript 放入文档本身调试。切换回您的工作脚本。
2021-05-18 18:59:23

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

在处理了一个错误后发现了这个错误,其中一个对象,例如:

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

生成错误(类和函数是关键字)这是通过添加引号修复的

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

我希望能为你节省一些时间

我遇到了同样的问题。我的代码正在使用类似if(_features.delete){...}导致错误的东西,因为 delete 是一个关键字。 stackoverflow.com/questions/26255/...
2021-04-24 18:59:23