JavaScript中的Object.seal()和Object.freeze()有什么区别?

Object.seal()Object.freeze()之间的区别在于,前者可以允许更改对象的现有属性,而后者则不允许对对象进行任何更改。Object.freeze()使对象不受任何影响,即使微小的更改也无法更改。

Object.seal()

Object.seal()方法阻止删除现有属性,但不能保护现有属性不受外部更改的影响。

示例

在下面的示例中,由于使用了Object.seal()方法,尽管应用了delete方法,但用户定义的属性“ prop1”并未被删除,而仅更新了属性“ prop1”的值。  

<html>
<body>
<script>
   var object1 = {
      prop1: 1
   };
   Object.seal(object1);
   object1.prop1 = 2; // value got changed
   delete object1.prop1;
   document.write(object1.prop1); // it gives value as 2 because of seal.
</script>
</body>
</html>

输出结果

2


Object.freeze()

除了Object.seal()的功能之外,Object.freeze()方法甚至都不允许对对象的现有属性进行细微的更改。

<html>
<body>
<script>
   var object1 = {
      prop1: 1
   };
   Object.freeze(object1);
   object1.prop1 = 2; // value got updated
   delete object1.prop1; // value got deleted
   document.write(object1.prop1); // it gives 1 as output despite value updated to 2
</script>
</body>
</html>

输出结果

1