1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

讲解冻结JS对象方法技术

冻结JS对象方法技术

我是本际云服务器推荐网的小编小本本,今天要和大家分享的是冻结JS对象方法技术,让我们一起来学习学习吧!

讲解冻结JS对象方法技术

冰封的美人——冻结JS对象

在学习冻结JS对象之前,我们先了解一下JS对象。JS对象是普通对象,采用键值对方式表示,其属性不加引号,对象内有对象属性,对象方法和普通的对象概念相同。例如:

var obj = {
  name: "cxy",
  age: "18"
}

要是只是修改对象的属性,可以使用obj.name="juejin",然后使用console.log(obj.name)查看属性是否生效。但是如果想要冻结对象,就可以使用Object.freeze()方法:

const iceObj = Object.freeze(obj)

执行上述代码后,iceObj就变成了冻结的对象。冻结是指对象的属性不能被修改、新增或删除。如果尝试修改对象的属性,如iceObj.age="19",然后再运行console.log(iceObj.age),会发现输出结果仍然是18。此外,还可以使用Object.isFrozen()方法检验对象是否被冻结,返回布尔值。

不可冻结的对象

但是,并不是所有的对象都可以被冻结。使用Object.freeze()方法不能冻结嵌套对象。例如:

var obj = {
  name: "cxy",
  age: "18",
  son: {
    name: "son",
    age: "1"
  }
}

尝试修改并打印一下son中的name属性,会发现其属性值是修改后的值。可以使用Object.seal()方法冻结数组,同样可以使用下标修改数组元素。而与Object.freeze()方法不同的是,Object.seal()方法可以修改属性值,但是不可以删除属性值。Object.isSealed()方法可以检验对象是否被冻结。

Object.preventExtensions()

除了Object.freeze()Object.seal()方法外,还有一种冻结的方法即Object.preventExtensions()。它可以冻结对象增加属性的能力。例如:

var obj = {
  name: "cxy",
  age: "18"
}
const iceObj = Object.preventExtensions(obj)
iceObj.weight = "180"
console.log(iceObj)

执行上述代码后,可以发现属性weight并没有被添加到对象中来,即对象属性的新增能力被冻结。同样可以使用Object.isSealed()方法检验对象是否被冻结。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7395.html