Diese Übersetzung ist unvollständig. Bitte helfen Sie, diesen Artikel aus dem Englischen zu übersetzen.
Zusammenfassung
Die Object.keys() Funktion gibt ein Array zurück welches die Properties des Objektes in der selben Anordnung hat wie die Anordung in der for...in Schleife (der Unterschied zwischen diesen beiden Varianten besteht darin das eine for-in Schleife auch die Properties in der Prototype Verkettung mit einbezieht).
Syntax
Object.keys(obj)
Parameter
-
obj - Das Objekt dessen zählbaren Properties zurück gegeben werden.
Beschreibung
Object.keys liefert ein Array dessen Elemente Strings sind welche die zählbaren Properties des Objekt respräsentieren. Die Anordnung der Properties ist die selbe wie bei einer for-in Schleife über das Objekt.
Beispiele
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
// array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
// array like object with random key ordering
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(an_obj)); // console: ['2', '7', '100']
// getFoo is property which isn't enumerable
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 1;
console.log(Object.keys(my_obj)); // console: ['foo']
Wenn alle Properties benötigt werden, wäre folgende Funktion zu nutzen
Object.getOwnPropertyNames().
Notizen
In ES5 wird, wenn das Argument für die Funktion kein Objekt ist ein TypeError Fehler geworfen.
In ES6 wird das Argument welches kein Objekt ist in eines gewandelt, welches aber nicht mehr den eigentlichem Wert entspricht (siehe Beispiel).
> Object.keys("foo")
TypeError: "foo" is not an object // ES5 code
> Object.keys("foo")
["0", "1", "2"] // ES6 code
Polyfill
Um eine Unterstützung für Object.keys() auch in älteren Umgebungen zu gewährleisten kopieren Sie das folgende Code Schnipsel:
// 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;
};
}());
}
Please note that the above code includes non-enumerable keys in IE7 (and maybe IE8), when passing in an object from a different window.
For a simple browser polyfill, see Javascript - Object.keys Browser Compatibility.
Spezifikationen
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 5.1 (ECMA-262) Die Definition von 'Object.keys' in dieser Spezifikation. |
Standard | Initial definition. Implemented in JavaScript 1.8.5. |
| ECMAScript 6 (ECMA-262) Die Definition von 'Object.keys' in dieser Spezifikation. |
Entwurf |
Browser Kompabilität
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 5 | 4.0 (2.0) | 9 | 12 | 5 |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | ? | ? | ? | ? | ? | ? |
Based on Kangax's compat table.