最详细的JavaScript高级教程(十五)对象的属性

本文详细介绍了JavaScript对象的属性,包括属性类型、数据属性与访问器属性的特性、属性创建、读取、遍历和不可变对象。还讨论了ES6中的对象解构赋值,强调了解构赋值的规则和应用场景。
摘要由CSDN通过智能技术生成

概念

ES对于对象的定义是:无序属性的集合,其属性可以包括基本值,对象或者函数。从中我们可以发现,js中的对象有下面的特征

  • 无序的集合,这个就让js中的对象更像是散列表,是一系列无序的键值对的集合
  • 属性包括基本值,对象或者函数。这个把属性可以包括哪些数据类型说的很清楚了

属性类型

ES中有下面两种属性

  1. 数据属性
  2. 访问器属性

顾名思义,数据属性可以保存一个数据值,而访问器属性本身不能保存数据值,但是可以通过getter setter进行访问控制,它的属性存储还需要额外的数据属性。

数据属性中值是如何存储的呢?我们就需要知道数据属性中的四个特性,事先说明,这四个属性的修改在日常开发中很难用到,但是对于我们理解数据属性为什么能够存值,对于理解对象大有益处。

数据属性拥有四个描述其特性的特性值,分别是:

  • Configurable 是否可以配置,是否可以被删除等(注意一旦这个值设置了false,就再也不能修改配置了,连这个值也不能再进行设置了)
  • Enumerable 是否可以使用for in枚举
  • Writable 是否可写
  • Value 存储其值,默认值是undefined,对于属性的读写操作其实是对于这个值的读写

我们需要注意一点,在严格模式下,对于设置了 不可配置或者不可写 特性的属性,对他们进行写操作会报错,在非严格模式下,不生效不报错。

我们使用Object.defineProperty来修改特征值,看下面的例子:

var person = {};
// 注意在设置的时候如果不指定,前三个特性默认值都是false,与默认不一致
Object.defineProperty(person, "name", {
    writable: false,
    value: "Nic"
});
alert(person.name);
person.name = "Pop"; // 严格模式下报错 Cannot assign to read only property 'name' of object '#<Object>'
alert(person.name);

与之相对应的,访问器属性也有四个特性࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值