js对象中什么是可枚举性(enumerable)?

摘要:
说到枚举,很多人可能会想到枚举,但javascript对象中有一个属性是可枚举的。这是怎么一回事?概念可枚举性用于控制所描述的属性是否包含在for…in循环中。具体来说,如果属性的可枚举性为false,则以下三个操作将无法获取属性*For..In循环*Object。keys方法*JSON。stringify方法可枚举“隐形”varo={a:1,b:2};o、 c=3;对象定义属性;o、 d//4用于控制台。日志;//1//2//3对象.keys//[“a”、“b”、“c”]JSON。Stringify(o//=˃“{a:1,b:2,c:3}”在上面的代码中,d属性的可枚举性为false,因此一般的遍历操作无法获得该属性,这使它有点像“secret”属性,但它的值仍然可以直接获得。

说到枚举,可能很多人都会想到枚举类型,但在javascript对象中有一个属性为可枚举性,他是什么呢?

概念

可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之中。具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性。
* for..in循环
* Object.keys方法
* JSON.stringify方法

enumerable “隐身术”
var o = {a:1, b:2};

o.c = 3;
Object.defineProperty(o, 'd', {
  value: 4,
  enumerable: false
});

o.d
// 4

for( var key in o ) console.log( o[key] ); 
// 1
// 2
// 3

Object.keys(o)  // ["a", "b", "c"]

JSON.stringify(o // => "{a:1,b:2,c:3}"

上面代码中,d属性的enumerablefalse,所以一般的遍历操作都无法获取该属性,使得它有点像“秘密”属性,但还是可以直接获取它的值。

至于for...in循环和Object.keys方法的区别,在于前者包括对象继承自原型对象的属性,而后者只包括对象本身的属性。如果需要获取对象自身的所有属性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法

免责声明:文章转载自《js对象中什么是可枚举性(enumerable)?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分布式系统常见的事务处理机制python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端js几种加密/解密方法

一、base64加密 base64的github地址 示例 <html> <head> <title>前端的base64使用方法</title> </head> <body> </body> <script>...

ES6规范

一、简介 js由三部分组成:ES+DOM(文档对象模型)+ BOM(浏览器对象模型) ES作为核心,是一套标准,规范了语言的组成部分:语法、类型、语句、关键字、保留字。定义了数据结构和语法,定义了函数和对象的实现,包括原型链和作用域链的机制和实现。 JavaScript 的核心 ECMAScript 描述了该语言的语法和基本对象; DOM 描述了处理网页内...

Jackson 框架JSON、XML、List、Map直接相互转换

博客分类:   json   参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 在其基础上做了稍微调整 详情见附件 jackson API文档:http://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9 Jacks...

JS中常用的xpath特性

//选择所有dir元素的值等于xx的元素    Dom.documentElement.selectNodes("server/dir[text()='xx']")       //选择server元素下的所有dir元素:    Dom.documentElement.selectNodes("server/dir")       //选择server元素...

JS控制SVG缩放+鼠标控制事件

话不多说,直接上代码吧,不行你砍我。。。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js控制SVG缩放</title> </head> <body>...

通过JS,全选当前页面所有的复选框

  最近在做项目时,遇到一个这样的需求,就是在多级菜单中,选中二级的复选框,默认将它下面的三级复选框全部选中,若选中一级的复选框,默认的将它下面的二级的和三级的复选框全部选中,通过JS,可以得到当前页面所有的复选框,但对于如何判断子级的复选框也能选中,就有些不太明白了,向朋友请教了下,呵呵,终于拨云见天了,感谢,方法如下,给遇到我类似需求的朋友一个参考!...