IE上未定义对象值

Object values undefined on IE

本文关键字:对象 未定义 IE      更新时间:2023-09-26

我在一个企业应用程序上有这样的流程:

  1. 在每个服务页面上都有一个"搜索框"。当用户开始在其中键入内容时,将触发对Struts2操作的调用(通过JQuery自动补全器)
  2. 在操作调用中,Hibernate在MySql数据库上的用户搜索中查找提示
  3. 当发现提示时,会给出JSON响应。类似于:

    ...
    "map": {
          "id": "1234",
          "title": "Title 1",
          "permalink": "title-1",
          "class": "contentClassA",
          "contentType": "Content type ..."
        },
    ...
    
  4. 回到前端JSP,一些Javascript创建了一个<div>的列表,每个列表都包含一个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(ver.7-8-9)属于else,无论我尝试什么,返回的classType变量都是未定义的。

我是不是错过了什么?

我认为您的问题在于propertyName "class",这是js中的一个保留关键字。检查下面的链接。

http://javascript.about.com/library/blreserved.htm

即使我在IE中遇到了类似的问题,我也只是将密钥class重命名为className

我想知道您使用此逻辑的目的是什么。但是,如果您想检查obj.map是否有class密钥,请使用hasOwnProperty:

if (obj.map.hasOwnProperty('class')) {
    // do something with obj.map['class']
}

如果你不知道obj中是否存在map,你也可以检查一下:

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

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