![](/img/trans.png)
[英]Does Object.keys() work in Internet Explorer 9 for built-in objects?
[英]Object.keys not working in internet Explorer
我有一個程序可以從字典中返回一個鍵列表。 該代碼可在 Chrome、Opera 和 Firefox 中正常運行,但不能在 Internet Explorer 中正常運行。 我添加了警報評論以關閉問題所在。 下面是導致問題的代碼。 警報按順序顯示
我在這里找到了一個類似的問題,但我相信在這個例子中,這不是正確的問題,因為我創建了字典,所以它是一個本地對象。
我不再確定 Object.keys 是問題所在,因此這里是完整頁面的鏈接。 我 JavaScript 在頁面中以使其更易於查看
http://www.londonlayout.co.uk/dev/live.htm
var myApp = {
init: function () {
var def = $.Deferred();
alert('App Initializing');
$.getJSON('data/data.json', function (raw) {
alert('Getting JSON');
myApp.data = raw;
$.each(myApp.data, function (code, details) {
try {
myApp.nameDict[details.name] = code;
}
catch (e) {}
});
alert('Got JSON');
myApp.names = Object.keys(myApp.nameDict);
alert('Got Keys')
def.resolve();
});
return def.promise();
},
data: {},
nameDict: {}
}
Object.keys
在 IE < 9 中不可用。 作為一個簡單的解決方法,您可以使用:
if (!Object.keys) {
Object.keys = function(obj) {
var keys = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
keys.push(i);
}
}
return keys;
};
}
這是一個更全面的 polyfill:
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = (function () {
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}
或者,如果您可以訪問 lodash,則可以使用keys 。 例如
_.keys(yourObj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.