Object.keys(...)并不总是在IE中工作

时间:2013-04-08 08:12:38

标签: javascript internet-explorer

SCRIPT438:对象不支持属性或方法'keys'

使用IE 9.0.8112.16421我收到此错误,但并非总是如此。两个环境中完全相同的应用程序和代码。一个在Intranet主机上运行JBoss,另一个在localhost上运行Jetty。前者给出错误。

这是失败的代码:

return $.get('/rest/typeaheads/' + query, function(data) {
    lastResults = data; 
>   return process(Object.keys(lastResults));  <
});

我有一个map的lastResults,它是通过ajax-call作为json对象接收的。我理解Object.keys(...)不适用于宿主对象,但我的json对象肯定不是宿主对象?

那怎么会发生这种情况以及两种环境之间的区别呢?

2 个答案:

答案 0 :(得分:1)

显然; IE 9将在Intranet环境中假设您的所有Intranet应用程序都是废话。因此它将进入“兼容模式”。在“兼容模式”下,它将模拟IE 7。

我的解决方案是添加一条通知,警告用户该问题,并提供关闭“兼容模式”的说明。

此外,如果我需要支持IE7,这对我来说不再是问题。我已经开始使用下划线库,它提供了自己的函数来检索键。

答案 1 :(得分:0)

你可以尝试自己动手:

Object.keys = Object.keys || function keys(obj) {
  var ret = [];
  for (var prop in obj) if (obj.hasOwnProperty(prop)) ret.push(prop)
  return ret;
}