一文彻底搞懂JavaScript 中Object.freeze与Object.seal的用法( 二 )
对象密封我们还有一种方法可以知道对象是否被密封 。非常明确地 , 我们可以调用Object.isSealed来知道:
Object.isSealed(objectToSeal); // === truelet notSealedObj = { a: 54 };Object.isSealed(notSealedObj); // === false
const呢?您可能会想看看Object.seal和Object.freeze并将它们与const进行比较 。请记住 , 它们是不同的概念 。Object.freeze和Object.seal适用于对象的值 , 而const适用于binding 。Object.freeze使对象不可变 。const创建一个不可变的绑定 。为变量分配值后 , 就无法为该绑定分配新值 。
原型呢?我最后要提的一件事是:原型 。如果您不熟悉JAVAscript原型 , 我会写一篇文章 。当涉及到Object.freeze和Object.seal时 , 要知道一旦冻结或密封它们后就不能更改它们的原型 。
let freezeThat = {name: 'Damien'}let sealThis = {age 28}Object.freeze(freezeThat)Object.seal(sealThis)// These two lines will fail!Object.setPrototypeOf(freezeThat, {x: 26})Object.setPrototypeOf(sealThis, {alive: true})
setPrototypeOf用于更改对象的原型 。将对象密封或冻结后 , 您将无法执行此操作 。与往常一样 , 在非严格模式下 , 它将静默失败 。在严格模式下 , 您会看到TypeError: Object is not extensible.
结论了解Object.freeze和Object.seal之间的区别很重要 。意识到这些差异将避免您在代码中使用它们时遇到麻烦 。
回顾一下:

文章插图
推荐阅读
- 一篇文章搞懂Python协程
- 一文告诉你SEO站长综合查询工具-5118功能使用大全
- 一文读懂吊车大臂伸缩臂原理
- 看了这篇,我确定你已经彻底搞懂Nginx了
- 网络知识扫盲,一文搞懂 DNS
- 怎么提升Linux性能,看完这篇文章,彻底掌握"平均负载"
- 24 张图彻底弄懂九大常见数据结构
- 一文带你彻底理解Linux的各种终端类型及概念
- 什么样的茶杯才算好茶杯?一文帮你挑到最实用的茶器
- 手电钻、冲击钻、电锤、电起子有什么区别?一文搞懂男人电钻工具