Mit können Object.getOwnPropertyNames()
Sie alle Eigenschaften abrufen, die zu einem Objekt gehören, unabhängig davon, ob sie aufzählbar sind oder nicht. Beispielsweise:
console.log(Object.getOwnPropertyNames(Math));
//-> ["E", "LN10", "LN2", "LOG2E", "LOG10E", "PI", ...etc ]
Sie können dann filter()
nur die folgenden Methoden verwenden:
console.log(Object.getOwnPropertyNames(Math).filter(function (p) {
return typeof Math[p] === 'function';
}));
//-> ["random", "abs", "acos", "asin", "atan", "ceil", "cos", "exp", ...etc ]
In ES3-Browsern (IE 8 und niedriger) sind die Eigenschaften von integrierten Objekten nicht aufzählbar. Objekte mögen window
und document
sind nicht eingebaut, sie werden vom Browser definiert und sind höchstwahrscheinlich vom Design her aufzählbar.
Aus ECMA-262 Edition 3 :
Globales Objekt
Es gibt ein eindeutiges globales Objekt (15.1), das erstellt wird, bevor das Steuerelement in einen Ausführungskontext eintritt. Zu Beginn hat das globale Objekt die folgenden Eigenschaften:
• Integrierte Objekte wie Math, String, Date, parseInt usw. Diese haben Attribute {DontEnum} .
• Zusätzliche vom Host definierte Eigenschaften. Dies kann eine Eigenschaft umfassen, deren Wert das globale Objekt selbst ist. Im HTML-Dokumentobjektmodell ist die Fenstereigenschaft des globalen Objekts beispielsweise das globale Objekt selbst.
Wenn die Steuerung in Ausführungskontexte eintritt und ECMAScript-Code ausgeführt wird, können dem globalen Objekt zusätzliche Eigenschaften hinzugefügt und die anfänglichen Eigenschaften geändert werden.
Ich sollte darauf hinweisen, dass dies bedeutet, dass diese Objekte keine aufzählbaren Eigenschaften des globalen Objekts sind. Wenn Sie den Rest des Spezifikationsdokuments durchsehen, werden Sie feststellen, dass für die meisten integrierten Eigenschaften und Methoden dieser Objekte das { DontEnum }
Attribut festgelegt ist.
Update: Ein anderer SO-Benutzer, CMS, hat mich auf einen IE-Fehler{ DontEnum }
aufmerksam gemacht.
Anstatt das DontEnum-Attribut zu überprüfen, überspringt [Microsoft] JScript jede Eigenschaft in einem Objekt, in der sich in der Prototypkette des Objekts eine gleichnamige Eigenschaft mit dem Attribut DontEnum befindet.
Kurz gesagt, seien Sie vorsichtig, wenn Sie Ihre Objekteigenschaften benennen. Wenn eine integrierte Prototyp-Eigenschaft oder -Methode mit demselben Namen vorhanden ist, überspringt der IE diese, wenn eine for...in
Schleife verwendet wird.