JS进阶 - 对象的属性特征

对象与属性

对象分类

  1. 内置对象
    • 非构造器对象(Math、JSON)
    • 构造器对象(Object、Array、Function、Number…)
  2. 宿主对象
    • 由宿主环境确定的
  3. 自定义对象
    • 用户自己创建的

属性的种类

  1. 数据属性
    • 对象的普通属性,从键到值的映射(包括方法)。
  2. 访问器属性
    • 类似于读、写 。
  3. 内置属性
    • 不能直接访问,可能存在间接访问方式,内置属性的键置于方括号中。

数据属性及其特性

属性特征

  • value:对应属性的值
  • writable:确定属性是否可改写性
  • configurable:确定属性是否能删除和其他特性是否可配置
  • enumerable:属性是否可枚举

属性描述符

  • 属性描述符是用来查看对象属性的特性的对象,该对象包含4个属性,对应4个特性
  • 封装了属性特性的对象,方便实现数据属性特性的设置和查询

属性特性

  • 设置
    1. 单数:Object.defineProperty(obj,prop,decsription)
      • obj — 要在其上定义属性的对象
      • prop — 要定义或修改的属性
      • description — 将被定义或修改的属性描述符
    2. 复数:Object.defineProperties()
  • 查询
    1. 单数:Object.getOwnPropertyDescriptor()
    2. 全部:Object.getOwnPropertyDescriptors()

四种属性

四种属性默认性

  • value 默认为 undefined
  • enmuerable、writable、configurable默认为false
  • 字面量定义默认为 true
    var obj = {PI:3.14};
    Object.getOwnPropertyDescriptor(obj,"PI");
    

枚举性

  1. 特性
    • 一般来说,系统创建的属性不可枚举,用户创建的属性可枚举
    • 枚举的主要目的是判断 for-in 循环中的哪些属性应该被忽略
  2. 枚举影响的操作
    • for-in循环 for(var key in obj)
    • Object.keys(obj),这是个方法要传参
    • JSON.stringify(),只有可枚举的才能用
  3. obj.propertyIsEnumerable(prop)
    • 返回一个布尔值表示指定的属性是否可枚举

可配置性

  • 一旦把configurable变成false,就不可以配置了,利用Object.defineProperty只可以修改writable这个属性,其他都不可以修改了

其他方法

  • Object.isExtensible()
    • 新创建的对象默认是可扩展的
  • Object.preventExtensions()
    • 变成不可扩展后,用传统的方式不可为其添加属性
  • Object.isSealed()
  • Object.seal()
    • 密封之后,返回的是原对象
    • 密封之后,任何值除修改属性以外的操作都会失败
  • Object.isForzen()
  • Object.freeze()
    • 冻结之后, 返回的是原对象
    • 冻结之后,只有删除属性是成功的

访问器属性及其特性

访问器属性

  • get:读取属性时调用的函数,默认是undefined
  • set:设置属性时调用的函数,默认是undefined
  • configurable
  • enumerable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值