JavaScript对象的属性有两类:数据属性和访问器属性

数据属性

数据属性有四个特性,分别为:

  1. [[value]]属性的值
  2. [[writeable]]属性是否可以修改
  3. [[enumerable]]属性是否可枚举
  4. [[configurable]]属性是否可配置,包括是否可删除,是否可修改属性的特性,是否可修改为访问器属性

通过一般方式默认的特性为undefined,true,true,true。通过defineProperty方式默认的特性为undefined,false,false,false。

注:如果通过defineProperty的操作未明确指定configurable为true,则属性的操作将受到限制(包括不能被修改,不能被删除,不能修改特性,不能修改为访问器属性)

访问器属性

访问器属性有四个特性,分别为:

  1. [[get]]属性的值
  2. [[set]]属性是否可以修改
  3. [[enumerable]]属性是否可枚举
  4. [[configurable]]属性是否可配置,包括是否可删除,是否可修改属性的特性,是否可修改为数据属性

通过一般方式默认的特性为undefined,undefined,true,true。通过defineProperty方式默认的特性为undefined,undefined,false,false。

注:如果通过defineProperty的操作未明确指定configurable为true,则属性的操作将受到限制(包括不能被修改,不能被删除,不能修改特性,不能修改为数据属性)

定义属性:

Object.defineProperty(对象,属性名称,属性描述符)
获取属性特性(属性描述符)
Object.getOwnProperyDescriptor(对象,属性名称)

自身属性

通过getOwnPropertyNames可以获取自身属性包括可枚举和不可枚举
for..in或者Object.keys可以获取自身以及原型链上的可枚举属性,然后通过hasOwnProperty可以获取自身的可枚举属性

参考:

  • JavaScript高级程序设计6.1理解对象
  • nodejs包merge-descriptors

个人博客地址 :http://blog.yangqiong.com.cn/dui-xiang-shu-xing/

最新文章

  1. 记一次MYSQL更新优化
  2. libevent源码分析:eventop
  3. 第一章 删掉centos原有的openjdk并安装sun jdk
  4. 自己开发的csdn手机客户端
  5. ucenter实现原理
  6. Android -- TabHost、Fragment、状态保存、通信
  7. linux c下mysql编程样例
  8. 【BZOJ】【2940】【POI2000】条纹
  9. Uncaught TypeError: Cannot set property 'innerHTML' of null
  10. hibernate 配置文件 和一个 id生成类BaseEntity.java 和一个hibernate工具类 HibernatUtils.java
  11. hadoop深入研究:(七)——压缩
  12. 【iOS】UIViewController生命周期
  13. codeforces 236A . Boy or Girl(串水问题)
  14. AJAX在Struts2中使用
  15. HDU 2412 Party at Hali-Bula
  16. Webpack单元测试,e2e测试
  17. 【转】JDBC学习笔记(10)——调用函数&存储过程
  18. 关于Videodownload helper的下载问题
  19. JDK 和 OpenJDK 的区别
  20. [leetcode]Unique Paths II @ Python

热门文章

  1. 转:使用 VisualVM 进行性能分析及调优
  2. sqlserver2012——EXCEPT差查询
  3. WPF语言切换,国际化
  4. 无监督学习:Deep Auto-encoder(深度自动编码器)
  5. PHP之递归函数
  6. 699. Falling Squares
  7. [openjudge] 1455:An Easy Problem 贪心
  8. 洛谷P2867 [USACO06NOV]大广场Big Square
  9. 2014-8-5 NOIP(雾)模拟赛
  10. HDU5340 Three Palindromes