js对象的属性探究

作者: csRyan | 来源:发表于2017-03-21 12:55 被阅读31次

js对象的属性有很多种,总结这一篇文章是为将来理解对象复制和对象继承打基础。

数据描述符

1. 可枚举性(Enumerable)

实际上对象的每一个属性都有一个标志位,表示这个属性是否可以枚举。我们通过obj.a=123这种方式设置的属性都为可枚举属性。有时候我们需要将属性设置为不可枚举,因为我们不希望这个属性在迭代的时候被访问(for...in
Object.keys
方法)。
原生对象中几乎所有属性都是不可枚举的。
你可以通过obj.propertyIsEnumerable(prop)来判断自身属性是否可枚举。

2. 可配置性(configurable)

当且仅当该属性的 configurable 为 true 时,该属性描述符
才能够被改变,也能够被删除。我们通过obj.a=123这种方式设置的属性都为可配置属性。

3. 可写性(writable)

当且仅当该属性的 writable 为 true 时,该属性才能被
赋值运算符改变。我们通过obj.a=123这种方式设置的属性都为可写属性。


存取描述符

get方法

一个给属性提供 getter 的方法,它决定了你访问这个属性的时候会发生什么。

set方法

一个给属性提供 setter 的方法,它决定了你给这个属性赋值的时候会发生什么。

数据描述符和存取描述符可以通过Object.defineProperty(obj, prop, descriptor)来设置或修改。有关如何使用它们,也可以在这个方法的描述中看到。


是否是对象自身的属性

对于一个对象来说,它的某个属性要么属于对象自身,要么是在原型链上。
有关原型链的内容,可以看我的另一篇文章彻底理解js的原型链


相关方法

判断方法:

  • obj.propertyIsEnumerable(prop) 返回该属性是否可以枚举,如果不是自身的属性,直接返回false。
  • obj.hasOwnProperty(prop):参数为属性名,返回布尔值,这个属性是否属于对象自身。只要在对象自身上,不管可不可枚举都返回true。
  • in 操作符:用法prop in objectName,返回这个属性是否存在于对象自身或原型链上,只要存在,不管可不可枚举都返回true。注意如果属性名是字符串,要用引号括起来。

获取方法:

  • Object.getOwnPropertyDescriptor
  • Object.getOwnPropertyNames(obj):返回obj的所有自身属性的属性名(包括可枚举和不可枚举的属性)组成的数组。
  • Object.keys(obj):返回obj的所有可枚举的自身属性的属性名组成的数组。
  • for (variable in object) {...}:迭代一个对象的所有可枚举属性,包括在原型链上的可枚举属性。

表格:


可枚举性与自身属性的相关方法

参考资料

相关文章

  • js对象的属性探究

    js对象的属性有很多种,总结这一篇文章是为将来理解对象复制和对象继承打基础。 数据描述符 1. 可枚举性(Enum...

  • 对象

    js对象 js对象是j's的基本数据类型, js中的对象是动态的, 可以新增属性,也可以删除属性。 1.获取时间 ...

  • Node.js模块与npm包管理

    一、Node.js模块对象的属性 在Node.js模块内部,模块对象具有以下的属性: module.id:属性值是...

  • JavaScript 面向对象的程序设计

    理解 JS 的对象 在 JS 中,对象被定义为——“无序属性的集合,其属性可以包含基本值、对象或函数。“ 我们可以...

  • JavaScript中对像的属性

    在JavaScript中,对象是属性的无序集合,通过对JS属性的理解可以更好地了解JS对象。 属性的构成与分类 在...

  • JS Tips

    遍历对象的所有属性 添加属性 给普通的 JS 对象添加属性: 但是对于 Mongodb 中的对象,不可直接添加属性...

  • 6.JavaScript中

    JS对象创建: JS通过构造函数创建对象: JS内置对象window: 所有的全局变量都是window的属性 所有...

  • JAVAWeb(第二周)

    js的String对象 创建String对象 var str="abc"; 方法和属性 ***属性: lengt...

  • 2019-11-27

    1.js 对象属性 2.js 对象方法 3.对象访问器 4.对象构造器 5.对象构造器加属性 6.对象方法 7.j...

  • js常用知识点总结-String对象

    js常用知识点总结-String对象 使用String对象: String对象属性: 属性描述constructo...

网友评论

    本文标题:js对象的属性探究

    本文链接:https://www.haomeiwen.com/subject/jhnwnttx.html