Apa perbedaan antara pembekuan objek () dan segel objek () dalam javascript?

Metode statis Object.seal()_ menyegel objek. Menyegel objek mencegah ekstensi dan membuat properti yang ada tidak dapat dikonfigurasi. Objek yang disegel memiliki seperangkat properti tetap. properti baru tidak dapat ditambahkan, properti yang ada tidak dapat dihapus, enumerabilitas dan konfigurasinya tidak dapat diubah, dan prototipenya tidak dapat ditetapkan ulang. Nilai properti yang ada masih dapat diubah selama dapat ditulis. seal() mengembalikan objek yang sama yang diteruskan

Object.seal(obj)

obj_

Objek yang harus disegel

Objek yang disegel

Menyegel objek sama dengan mencegah ekstensi dan kemudian mengubah semua yang ada menjadi configurable: false. Ini memiliki efek membuat kumpulan properti pada objek diperbaiki. Membuat semua properti tidak dapat dikonfigurasi juga mencegahnya diubah dari properti data menjadi properti pengakses dan sebaliknya, tetapi tidak mencegah nilai properti data diubah. Mencoba menghapus atau menambahkan properti ke objek tersegel, atau mengonversi properti data menjadi pengakses atau sebaliknya, akan gagal, baik secara diam-diam atau dengan melemparkan TypeError (paling umum, meskipun tidak eksklusif, saat dalam kode mode ketat)

Rantai prototipe tetap tidak tersentuh. Namun, karena mencegah ekstensi, [[Prototype]] tidak dapat dipindahkan

Tidak seperti Object.freeze(), objek yang disegel dengan Object.seal() dapat mengubah properti yang ada, asalkan dapat ditulisi

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
_

Di ES5, jika argumen untuk metode ini bukan objek (primitif), maka akan menyebabkan TypeError. Di ES2015, argumen non-objek akan dikembalikan apa adanya tanpa kesalahan, karena primitif sudah, menurut definisi, tidak dapat diubah

Apa perbedaan antara pembekuan objek dan segel objek?

segel (nama objek); . freeze(nama objek);. javascript

Apa itu segel objek dalam JavaScript?

Menyegel objek mencegah ekstensi dan membuat properti yang ada tidak dapat dikonfigurasi . Objek yang disegel memiliki seperangkat properti tetap. properti baru tidak dapat ditambahkan, properti yang ada tidak dapat dihapus, enumerabilitas dan konfigurasinya tidak dapat diubah, dan prototipenya tidak dapat ditetapkan ulang.

Kapan sebaiknya Anda menggunakan pembekuan objek?

Benda yang dibekukan tidak bisa lagi diubah;

Bagaimana Anda menentukan apakah suatu benda disegel atau tidak?

Sebuah objek disegel jika tidak dapat diperluas dan jika semua propertinya tidak dapat dikonfigurasi dan karena itu tidak dapat dilepas (namun tidak harus tidak .