Object.isFrozen()

Object.isFrozen() gibt an ob ein Objekt eingefroren ist.

Syntax

Object.isFrozen(obj)

Parameter

obj
Das Objekt, welches überprüft werden soll.

Rückgabewert

Ein Boolean-Wert, der angibt ob das Objekt eingefroren ist oder nicht.

Beschreibung

Ein Objekt gilt dann und nur dann als eingefroren, wenn es nicht erweiterbar ist, all seine Eigenschaften nicht konfigurierbar sind und all seine Daten-Eigenschaften (d.h. Eigenschaften die nicht durch Getter oder Setter definiert sind) nicht schreibbar sind.

Beispiele

// Ein neues Objekt ist erweiterbar, also nicht eingefroren.
Object.isFrozen({}); // === false

// An leeres Objekt, das nicht erweiterbar ist, 
// ist sinnlos eingefroren.
var sinnlos = Object.preventExtensions({});
Object.isFrozen(sinnlos); // === true

// Ein neues Objekt mit einer einzelnen Eigenschaft, ist auch erweiterbar,
// ergo nicht eingefroren.
var eineEigenschaft = { p: 42 };
Object.isFrozen(eineEigenschaft); // === false

// Das Objekt nicht erweiterbar zu machen, friert es nicht ein,
// da die Eigenschaft immer nocht konfigurierbar und schreibbar ist.
Object.preventExtensions(eineEigenschaft);
Object.isFrozen(eineEigenschaft); // === false

// ...wenn man die Eigenschaft aber löscht,
// wird das Objekt sinnlos
delete eineEigenschaft.p;
Object.isFrozen(eineEigenschaft); // === true

// Ein nicht erweiterbares Objekt, mit einer nicht schreibbaren
// jedoch konifgurierbaren Eigenschaft gilt als nicht eingefroren.
var nichtSchreibbar = { e: 'plep' };
Object.preventExtensions(nichtSchreibbar);
Object.defineProperty(nichtSchreibbar, 'e', {
  writable: false
}); // `e` wird nicht schreibbar
Object.isFrozen(nichtSchreibbar); // === false

// Wird diese Eigenschaft nicht konfigurierbar,
// so friert das Objekt ein.
Object.defineProperty(nichtSchreibbar, 'e', {
  configurable: false
}); // `e` wird nicht konfigurierbar
Object.isFrozen(nichtSchreibbar); // === true

// Ein nicht erweiterbares Objekt, mit einer nicht konfigurierbaren
// jedoch schreibbaren Eigenschaft gilt ebenfalls als nicht eingefroren.
var nichtKonfigurierbar = { release: 'the kraken!' };
Object.preventExtensions(nichtKonfigurierbar);
Object.defineProperty(nichtKonfigurierbar, 'release', {
  configurable: false
});
Object.isFrozen(nichtKonfigurierbar); // === false

// Wird diese Eigenschaft nicht schreibbar, 
// so friert das Objekt ein.
Object.defineProperty(nichtKonfigurierbar, 'release', {
  writable: false
});
Object.isFrozen(nichtKonfigurierbar); // === true

// Ein nicht erweiterbares Objekt, mit einer konfigurierbaren
// dynamischen Eigenschaft (get/set) ist nicht eingefroren.
var dynamisch = { get food() { return 'yum'; } };
Object.preventExtensions(dynamisch);
Object.isFrozen(dynamisch); // === false

// ABER, wird diese Eigenschaft nicht konfigurierbar, 
// friert das Objekt ein.
Object.defineProperty(dynamisch, 'food', {
  configurable: false
});
Object.isFrozen(dynamisch); // === true

// Am Ende ist die einfachste Methode um ein Objekt einzufrieren,
// Object.freeze aufzurufen.
var eingefroren = { 1: 81 };
Object.isFrozen(eingefroren); // === false
Object.freeze(eingefroren);
Object.isFrozen(eingefroren); // === true

// Per Definition ist ein eingefrorenes Objekt nicht erweiterbar.
Object.isExtensible(eingefroren); // === false

// Und es ist ebenfalls versiegelt.
Object.isSealed(eingefroren); // === true

Anmerkungen

In ES5, wirft die Methode einen TypeError, wenn der Parameter kein primitives Objekt ist.

In ES2015 wird der Parameter, sollte er kein primitives Objekt sein, als bereits eingefrorenes Objekt betrachtet und gibt dementsprechend einfach true zurück.

Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)

Object.isFrozen(1);
// true                          (ES2015 code)

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Object.isFrozen' in dieser Spezifikation.
Standard Initiale Definition. In JavaScript 1.8.5 implementiert.
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Object.isFrozen' in dieser Spezifikation.
Standard
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Object.isFrozen' in dieser Spezifikation.
Entwurf

Browser Kompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidFirefox für AndroidOpera für AndroidSafari auf iOSSamsung InternetNode.js
isFrozenChrome Vollständige Unterstützung 6Edge Vollständige Unterstützung 12Firefox Vollständige Unterstützung 4IE Vollständige Unterstützung 9Opera Vollständige Unterstützung 12Safari Vollständige Unterstützung 5.1WebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja

Legende

Vollständige Unterstützung  
Vollständige Unterstützung

Siehe auch