Wie Sam Dutton antwortete, wurde in ECMAScript 5th Edition eine neue Methode für diesen Zweck eingeführt. Object.keys()
wird das tun, was Sie wollen, und wird unterstützt in Firefox 4 , Chrome 6, Safari 5 und IE 9 .
Sie können die Methode auch sehr einfach in Browsern implementieren, die sie nicht unterstützen. Einige der Implementierungen sind jedoch nicht vollständig mit dem Internet Explorer kompatibel. Hier ist eine besser kompatible Lösung:
Object.keys = Object.keys || (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !{toString:null}.propertyIsEnumerable("toString"),
DontEnums = [
'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty',
'isPrototypeOf', 'propertyIsEnumerable', 'constructor'
],
DontEnumsLength = DontEnums.length;
return function (o) {
if (typeof o != "object" && typeof o != "function" || o === null)
throw new TypeError("Object.keys called on a non-object");
var result = [];
for (var name in o) {
if (hasOwnProperty.call(o, name))
result.push(name);
}
if (hasDontEnumBug) {
for (var i = 0; i < DontEnumsLength; i++) {
if (hasOwnProperty.call(o, DontEnums[i]))
result.push(DontEnums[i]);
}
}
return result;
};
})();
Beachten Sie, dass die derzeit akzeptierte Antwort keine Prüfung auf hasOwnProperty() und gibt Eigenschaften zurück, die über die Prototypenkette vererbt werden. Es berücksichtigt auch nicht den berühmten DontEnum-Fehler im Internet Explorer, bei dem nicht aufzählbare Eigenschaften in der Prototypenkette dazu führen, dass lokal deklarierte Eigenschaften mit demselben Namen ihr DontEnum-Attribut erben.
Umsetzung von Object.keys() erhalten Sie eine robustere Lösung.
EDIT: im Anschluss an ein kürzlich geführtes Gespräch mit kangax einem bekannten Mitwirkenden an Prototype, habe ich die Abhilfe für den DontEnum-Fehler auf der Grundlage des Codes für seine Object.forIn()
Funktion gefunden aquí .
3 Stimmen
Ein bisschen Off-Topic, aber wenn Sie underscore.js verwenden:
_.keys(myJSONObject)
5 Stimmen
TL;DR: Wenn Sie nur aufzählbare Eigenschaften wünschen:
Object.keys(obj)
Manchmal möchte man auch nicht aufzählbare Eigenschaften haben. Denken Sie daran, wenn Sie dies tun! Um sie zu erhalten, verwenden SieObject.getOwnPropertyNames(obj)
stackoverflow.com/a/32413145/1599699