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