代码之家  ›  专栏  ›  技术社区  ›  psychotik

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

  •  79
  • psychotik  · 技术社区  · 15 年前

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

    我扫描了我的代码很多次,然后运行jslint,但它没有发现任何问题——有人知道导致这个错误消息的一般类型的JS问题吗?

    19 回复  |  直到 6 年前
        1
  •  140
  •   amercader    12 年前

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

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

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

        2
  •  82
  •   Roy Hyunjin Han    13 年前

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

    坏的

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

    {'class': 'overlay'}
    

    在JavaScript字典中将保留关键字用作键时,请将该键括在引号中。

    希望这个提示能为你节省一天的调试时间。

        3
  •  11
  •   cjstehno    15 年前

    实际上,我最近在IE上得到了类似的东西,它与JavaScript语法“错误”有关。我在引语中说错误是因为除了IE之外,其他地方都很好。这是在IE6之下。这个问题与JSON对象创建和一个额外的逗号有关,例如

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

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

    是的,我觉得我的25行javascript中的数百万行代码也很有趣。

    祝你好运。

        4
  •  8
  •   momo    15 年前

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

    调试可能会突出问题。但是,问题发生在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
    
        5
  •  4
  •   chopstik    13 年前

    http://closure-compiler.appspot.com/home 将使用错误脚本中实际行号的准确引用来获取此错误。

        6
  •  4
  •   Josue Alexander Ibarra    12 年前

    刚才在我的一个应用程序中看到了这个bug,作为一个catch all,请记住将所有与关键字相同的javascript属性的名称括起来。

    在处理以下对象的错误后发现此错误:

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

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

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

    我希望能节省你一些时间

        7
  •  2
  •   B Seven    14 年前

    如前所述,多加一个逗号会引发错误。

    在IE 7.0中,行尾没有分号也会导致错误。它在Safari和Chrome中工作正常(控制台中没有错误)。

        8
  •  2
  •   Muhd Marcin    14 年前

    IE7比新的浏览器,特别是Chrome,要宽容得多。我喜欢使用 JSLint 找到这些虫子。它会发现这些逗号的位置不正确。您可能希望激活该选项以忽略不正确的空白。

    除了不正确地放置逗号之外, this blog 在有人报告的评论中:

    我一直在寻找一个只说“预期标识符”的错误。 仅在IE(7)中。我的研究把我引向了这一页。一些之后 很沮丧,结果发现我用了一个 作为函数名的单词(“switch”)。错误不清楚,而且 指向错误的行号。

        9
  •  1
  •   king4test    13 年前

    删除不需要的,登录功能。你会得到解决方案的。

    参考此

    http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/

        10
  •  1
  •   indiv Olivier Poulin    12 年前

    当我们添加或错过删除数组末尾或函数代码中的逗号时,就会发生此错误。对于这种错误,有必要观察整个网页的代码。

    我在为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>
    
        11
  •  0
  •   Roland Bouman    15 年前

    对我来说,这听起来像是一个脚本,它是用SRC拉入的,只加载了一半,导致了一个语法错误sine剩余部分没有加载。

        12
  •  0
  •   Stefan Michev    12 年前

    IE7存在对象数组问题

    columns: [
    {
      field: "id",
      header: "ID"
    },
    {
      field: "name",
      header: "Name" , /* this comma was the problem*/ 
    },
    ...
    
        13
  •  0
  •   Kevin Audleman    12 年前

    这个bug的另一个变体是:我有一个名为“continue”的函数,因为它是一个保留字,所以抛出了这个错误。我不得不将我的函数重命名为“continuelick”

        14
  •  0
  •   Niels Steenbeek    11 年前

    也许你有一个对象有一个方法“constructor”,并尝试调用它。

        15
  •  0
  •   iDevGeek    10 年前

    使用淘汰JS时可能会遇到此问题。如果尝试像下面的示例一样设置类属性,它将失败:

    <span data-bind="attr: { class: something() }"></span>
    

    像这样转义类字符串:

    <span data-bind="attr: { 'class': something() }"></span>
    

    我的2美分。

        16
  •  0
  •   user5171707    10 年前

    我也遇到过这个问题。我发现下面有两个解决方案。 1)。和上面其他人提到的一样,从JSON对象中删除多余的逗号。 2)。另外,我的jsp/html也有。因此,它触发了浏览器的旧模式,给JS额外逗号的错误。当使用它时,它会触发浏览器的HTML5模式(如果支持的话),它甚至可以像其他浏览器一样使用额外的逗号。

        17
  •  0
  •   hisenberg    9 年前

    以下是调试问题的简单方法: 将脚本/代码回送到控制台。 将代码从控制台复制到您的IDE中。 大多数IDE对代码执行错误检查并突出显示错误。 您应该能够在JavaScript/HTML编辑器中立即看到错误。

        18
  •  0
  •   anaitslimane    9 年前

    有相同的问题,配置不同。这是一个角度工厂的定义,但我认为它也可能发生在其他地方:

    angular.module("myModule").factory("myFactory", function(){
        return
        {
            myMethod : function() // <--- error showing up here
            {
                // method definition
            } 
        }
    });
    

    Fix非常异国情调:

    angular.module("myModule").factory("myFactory", function(){
        return { // <--- notice the absence of the return line
            myMethod : function()
            {
                // method definition
            } 
        }
    });
    
        19
  •  0
  •   rayray    6 年前

    如果在类中的某个位置调用函数,也可能在typescript中发生这种情况。例如

    class Dojo implements Sensei {
         console.log('Hi'); // ERROR Identifier expected.
         constructor(){}
    }
    

    函数调用,比如 console.log() 必须在函数内部。不在应该声明类字段的区域中。