JS中鲜为人知的属性类型

本文介绍了JavaScript中鲜为人知的属性类型,包括数据属性和访问器属性。数据属性包含数据值,有四个不可直接访问的特性:writable、enumerable、configurable和value。而访问器属性不包含数据值,而是getter和setter函数。通过`Object.defineProperty()`方法可以定义和修改这些属性特性。同时,`Object.getOwnPropertyDescriptor()`方法用于获取属性的描述符。最后,文章总结了不同属性类型的特性及其应用场景。
摘要由CSDN通过智能技术生成

我们都听说过数据类型或者引用类型,那你有听过属性类型吗?我也是看了JS高程才知道的,虽然平时见的真的挺少,那对于理解这门语言真的有很大的帮助,其实属性这个概念一般都是讲对象的时候才用到,而且也有没特别关注属性还有类型这门事,好了闲话不多,我们一起来玩玩这个神奇的东西。

ECMA-262描述道:

ECMA-262 第5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征。
ECMA-262 定义这些特性是为了实现JavaScript 引擎用的,因此在JavaScript 中不能直接访问它们。

也就是说,我们直接通过一个点运算符来访问它们,那这些属性到底是啥呢,怎么访问呢?

属性类型分为以下两种:

数据属性

数据属性包含一个数据值的位置。在这个位置可以读取和写入值

数据属性有四个描述其行为的特性,放在了两对方括号中,表示是不可直接访问的。

  • [[Configurable]]:可以通过delete删除的属性,默认为true
  • [[Enumerable]]:可枚举的属性,也就是可以通过for-in循环遍历出来的属性,默认true
  • [[Writable]]:可写的属性,也就是可以修改属性,默认true
  • [[Value]]:属性的值。默认为undefined

那怎么来验证呢,一般来说我们创建对象是没法看到这些属性的,ES5中提供了一个方法:

Object.defineProperty()

MDN描述道:

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

方法接受三个参数:属性所在的对象、属性的名字和一个描述符对象(descriptor

下面我新建一个字面量对象:

		const obj = {
   
			name: 'laocao',
			age: 18,
			sex: 'male'
		};

		Object.defineProperty(obj, 'name', {
   
			configurable: false,
			writable: false,
			enumerable: false
		});

		delete obj.name;
		console.log(obj.nam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值