Object.seal()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die Object.seal() statische Methode versiegelt ein Objekt. Das Versiegeln eines Objekts verhindert Erweiterungen und macht bestehende Eigenschaften nicht konfigurierbar. Ein versiegeltes Objekt hat eine feste Menge an Eigenschaften: Neue Eigenschaften können nicht hinzugefügt werden, bestehende Eigenschaften können nicht entfernt werden, ihre Enumerierbarkeit und Konfigurierbarkeit können nicht geändert werden, und sein Prototyp kann nicht neu zugewiesen werden. Die Werte bestehender Eigenschaften können weiterhin geändert werden, solange sie beschreibbar sind. seal() gibt dasselbe Objekt zurück, das übergeben wurde.

Probieren Sie es aus

const object1 = {
  property1: 42,
};

Object.seal(object1);
object1.property1 = 33;
console.log(object1.property1);
// Expected output: 33

delete object1.property1; // Cannot delete when sealed
console.log(object1.property1);
// Expected output: 33

Syntax

js
Object.seal(obj)

Parameter

obj

Das Objekt, das versiegelt werden soll.

Rückgabewert

Das versiegelte Objekt.

Beschreibung

Das Versiegeln eines Objekts entspricht dem Verhindern von Erweiterungen und dem anschließenden Ändern aller bestehenden Eigenschaftsdeskriptoren zu configurable: false. Dies hat zur Folge, dass die Menge der Eigenschaften eines Objekts festgelegt wird. Dadurch, dass alle Eigenschaften nicht konfigurierbar gemacht werden, wird ebenfalls verhindert, dass sie von Daten-Eigenschaften in Zugriffseigenschaften und umgekehrt konvertiert werden. Es wird jedoch nicht verhindert, dass die Werte von Daten-Eigenschaften geändert werden. Der Versuch, Eigenschaften zu löschen oder hinzuzufügen, oder eine Daten-Eigenschaft in eine Zugriffseigenschaft (oder umgekehrt) zu konvertieren, wird entweder stillschweigend scheitern oder eine TypeError werfen (häufig, aber nicht ausschließlich, wenn der Code im strikten Modus geschrieben ist).

Private Eigenschaften haben kein Konzept von Eigenschaftsdeskriptoren. Private Eigenschaften können weder hinzugefügt noch vom Objekt entfernt werden, unabhängig davon, ob das Objekt versiegelt ist oder nicht.

Die Prototypenkette bleibt unberührt. Aufgrund der Wirkung des Verhinderns von Erweiterungen kann jedoch der [[Prototype]] nicht neu zugewiesen werden.

Im Gegensatz zu Object.freeze() können die bestehenden Eigenschaften von Objekten, die mit Object.seal() versiegelt wurden, geändert werden, solange sie beschreibbar sind.

Beispiele

Verwendung von Object.seal

js
const obj = {
  prop() {},
  foo: "bar",
};

// New properties may be added, existing properties
// may be changed or removed.
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;

const o = Object.seal(obj);

o === obj; // true
Object.isSealed(obj); // true

// Changing property values on a sealed object
// still works.
obj.foo = "quux";

// But you can't convert data properties to accessors,
// or vice versa.
Object.defineProperty(obj, "foo", {
  get() {
    return "g";
  },
}); // throws a TypeError

// Now any changes, other than to property values,
// will fail.
obj.quaxxor = "the friendly duck";
// silently doesn't add the property
delete obj.foo;
// silently doesn't delete the property

// ...and in strict mode such attempts
// will throw TypeErrors.
function fail() {
  "use strict";
  delete obj.foo; // throws a TypeError
  obj.sparky = "arf"; // throws a TypeError
}
fail();

// Attempted additions through
// Object.defineProperty will also throw.
Object.defineProperty(obj, "ohai", {
  value: 17,
}); // throws a TypeError
Object.defineProperty(obj, "foo", {
  value: "eit",
}); // changes existing property value

Argument ohne Objekt

In ES5 führt ein Argument, das kein Objekt (sondern ein primitiver Wert) ist, zu einer TypeError. In ES2015 wird ein Argument, das kein Objekt ist, unverändert zurückgegeben, da Primitive per Definition bereits unveränderlich sind.

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

Object.seal(1);
// 1                             (ES2015 code)

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-object.seal

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
seal

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch