Javascript IE上未定义的对象值

Javascript IE上未定义的对象值,javascript,json,internet-explorer,Javascript,Json,Internet Explorer,我在一个企业应用程序中得到了以下流程: 在每个服务页面上都有一个“搜索框”。当用户开始在其中键入内容时,调用Struts 2操作(通过JQuery自动完成器) 在操作调用中,Hibernate会在MySql数据库上查找有关用户搜索的提示 当发现提示时,会给出JSON响应。比如: ... "map": { "id": "1234", "title": "Title 1", "permalink": "title-1", "class": "conte

我在一个企业应用程序中得到了以下流程:

  • 在每个服务页面上都有一个“搜索框”。当用户开始在其中键入内容时,调用Struts 2操作(通过JQuery自动完成器)
  • 在操作调用中,Hibernate会在MySql数据库上查找有关用户搜索的提示
  • 当发现提示时,会给出JSON响应。比如:

    ...
    "map": {
          "id": "1234",
          "title": "Title 1",
          "permalink": "title-1",
          "class": "contentClassA",
          "contentType": "Content type ..."
        },
    ...
    
  • 回到前端JSP,一些Javascript创建了一个列表,其中每个列表都包含一个
    map
    对象的数据

  • 第1-4步是在Firefox版本11之前和Internet Explorer版本9之前。然后通过Javascript,我尝试构建一个
    self.location
    重定向,以重新加载页面,区分
    class
    值。这就是问题所在。
    obj
    变量包含一个JSON
    map
    ,如上所述,我这样做:

        var classType; 
        if(obj['class'] != undefined) {
            classType = obj['class'];
        } else {
            //classType = obj.map.class;
            //classType = obj['map'].class;
            //classType = obj.class;
            // ...
            classType = obj.map['class'];
        }
    
    在FF上一切正常,但是IE(7-8-9版)属于else,并且返回的
    classType
    变量未定义,无论我如何尝试


    我遗漏了什么吗?

    我认为您的问题在于propertyName
    “class”
    ,它是js中的保留关键字。检查下面的链接


    即使我在IE上也遇到了类似的问题,我只是简单地将key
    class
    重命名为
    className

    我想你的问题在于propertyName
    “class”
    ,这是js中的一个保留关键字。检查下面的链接


    即使我在IE上也遇到了类似的问题,我只是简单地将key
    class
    重命名为
    className

    我不知道你用这种逻辑有什么目的。但是,如果要检查
    obj.map
    是否有
    class
    键,请使用
    hasOwnProperty

    if (obj.map.hasOwnProperty('class')) {
        // do something with obj.map['class']
    }
    
    如果您不知道
    map
    是否存在于
    obj
    中,您也可以检查:

    if ('map' in obj && obj.map.hasOwnProperty('class')) {
        //
    }
    

    有很多方法可以检查对象中是否存在属性,这一切都取决于您对数据的控制程度以及需要说明的情况。

    我想知道您使用这种逻辑的目的是什么。但是,如果要检查
    obj.map
    是否有
    class
    键,请使用
    hasOwnProperty

    if (obj.map.hasOwnProperty('class')) {
        // do something with obj.map['class']
    }
    
    如果您不知道
    map
    是否存在于
    obj
    中,您也可以检查:

    if ('map' in obj && obj.map.hasOwnProperty('class')) {
        //
    }
    

    有很多方法可以检查对象中是否存在属性,这一切都取决于您对数据的控制程度以及需要说明的情况。

    谢谢,但我已经知道键存在并且有值,因为在FF、Chrome和Safari中它可以工作谢谢,但我已经知道键存在并且有值,因为在FF、Chrome和Safari中它是有效的