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';