博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可枚举属性和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames())...
阅读量:5368 次
发布时间:2019-06-15

本文共 1512 字,大约阅读时间需要 5 分钟。

 for...in循环是 遍历对象的每一个可枚举属性,包括原型链上面的可枚举属性,而Object.keys()只是遍历自身的可枚举属性,不可以遍历原型链上的可枚举属性. 这是for...in和Object.keys()的主要区别,而Object.getOwnPropertyNames()则是遍历自身所有属性(不论是否是可枚举的),不包括原型链上面的.

 

举个例子:

function People(){  this.name = 'Tom';  this.age = 24;  this.c = function(){  console.log('1');  }}People.prototype.look = function(){  console.log('look at this');}var b = new People();//使用Object.defineProperty方法为b添加一个'sex'的不可枚举属性Object.defineProperty(b,'sex',{value:'女',enumerable:false});for(var i in b){  console.log(i);}

我们可以遍历到对象b的所有可枚举属性,其中包括从原型继承来的look.

 

 

接着我们使用Object.keys()来遍历,代码如下:

function People(){  this.name = 'Tom';  this.age = 24;  this.c = function(){  console.log('1');  }}People.prototype.look = function(){  console.log('look at this');}var b = new People();//使用Object.defineProperty方法为b添加一个'sex'的不可枚举属性Object.defineProperty(b,'sex',{value:'女',enumerable:false});console.log(Object.keys(b));//结果["name","age","c"]

 

从打印的结果我们看到, Object.keys()遍历的是自身可枚举属性,他不包括原型链上的look.

下面我们使用Object.getOwnPropertyNames()方法试试,具体代码如下:

function People(){  this.name = 'Tom';  this.age = 24;  this.c = function(){  console.log('1');  }}People.prototype.look = function(){  console.log('look at this');}var b = new People();//使用Object.defineProperty方法为b添加一个'sex'的不可枚举属性Object.defineProperty(b,'sex',{value:'女',enumerable:false});console.log(Object.getOwnPropertyNames(b));//结果["name", "age", "c", "sex"]

可以看到,Object.getOwnPropertyNames()遍历的是自身的可枚举和不可枚举属性,  不含原型链上的.

具体可以查看方法,  ,  方法,以及方法.

 

转载于:https://www.cnblogs.com/lxk0301/p/7235319.html

你可能感兴趣的文章
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
[工具] Sublime Text 使用指南
查看>>
Web服务器的原理
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
HAL层三类函数及其作用
查看>>
web@h,c小总结
查看>>
Data Structure 基本概念
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
core--线程池
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>