Javascript不可变对象

本文介绍了JavaScript中不可变对象的概念,包括不可扩展、密封和冻结三种方式。通过Object.preventExtensions、Object.seal和Object.freeze方法,可以防止对象被添加新属性、修改或删除属性。这些操作具有不同程度的限制,并且都是浅层操作。文章还提供了相应的检测方法和属性描述符变化的分析,帮助理解不同操作的差异和应用场景。
摘要由CSDN通过智能技术生成

可变对象

我们知道,JavaScript中对象是弱类型的。一般情况下,可以不受限制的为对象添加属性,修改属性,删除属性。大部分情况下,我们使用的都是可变对象。

不可变对象

对应的,我们不希望代码中某些对象被任意修改,比如添加、修改、删除等。这就是我们的不可变对象。JavaScript为我们提供了一些原生方法,借助它们可以讲一些可变对象转变成不可变对象。一共有三种:不可扩展,密封,冻结。

不可扩展

如果一个对象可以添加新的属性,则这个对象是可扩展的。相反,不可以添加新属性时就是不可扩展对象。我们可以使用 preventExtensions 让这个对象变的不可扩展。当对象不可扩展时,添加属性将静默失败或者 TypeError(严格模式下)。

function Person(name) {
	this.name = name;
}
var kaka = new Person('kaka')
Object.preventExtensions(kaka);
kaka.secondName = 'zhang';
// 非严格模式下,静默失败
// 'use strict' 下 TypeError: Can't add property secondName, object is not extensible
检测

JS 提供了 Object.isExtensible 方法帮我们检测对象是否可扩展。

Object.isExtensible(kaka) // false, kaka为不可扩展对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值