Object.freeze

Version >= 五

Object.freeze 通過阻止新增新屬性,刪除現有屬性以及修改現有屬性的可列舉性,可配置性和可寫性來使物件不可變。它還可以防止更改現有屬性的值。但是,它不能遞迴地工作,這意味著子物件不會自動凍結並且可能會發生變化。

除非程式碼在嚴格模式下執行,否則凍結後的操作將無提示失敗。如果程式碼處於嚴格模式,則會丟擲 TypeError

var obj = {
  foo: 'foo',
  bar: [1, 2, 3],
  baz: {
    foo: 'nested-foo'
  }
};

Object.freeze(obj);

// Cannot add new properties
obj.newProperty = true;

// Cannot modify existing values or their descriptors
obj.foo = 'not foo';
Object.defineProperty(obj, 'foo', {
    writable: true
});

// Cannot delete existing properties
delete obj.foo;

// Nested objects are not frozen
obj.bar.push(4);
obj.baz.foo = 'new foo';